[LeetCode]1.两数之和

力扣(Leetcode)第1题:两数之和(C语言版本) 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6 阅读详情

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

1. 暴力法

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    result[0] = i;
                    result[1] = j;
                    return result;
                }
            }
        }
        return result;
    }
}

算法复杂度分析:

时间复杂度=O(n^2)

空间复杂度=O(1)

空间复杂度如何算:

空间复杂度嘛,其实就是算法在运行过程中临时占用存储空间的大小。计算起来也不难,通常,我们都是看算法的最坏情况需要多少额外空间。

举个例子吧,如果你有一个简单的数组排序算法,比如冒泡排序,那么它的空间复杂度就是O(1)。因为不管数组多大,你只需要一个额外的变量来交换数组中的元素位置,所以空间需求是常数级别的。

但是,如果你使用了像归并排序这样的算法,那么空间复杂度就是O(n),因为在归并的过程中,你需要一个额外的数组来存储合并后的结果。

空间复杂度的计算主要是看算法在运行过程中除了存储输入数据之外,还需要多少额外的空间。这样,你就能更好地了解算法的性能,并优化它啦!

2.两遍哈希表

先把数组元素和对应下标存储在哈希表hashtable中,再通过一个循环,在表中寻找有没有元素满足要求的,如果有,检查它的下标,要求不能是同一个下标的元素,满足条件就通过hashtable返回它对应下标。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> mapTable = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            mapTable.put(nums[i], i);
        }
        for(int i=0;i<nums.length;i++){
            int complement = target - nums[i];
            if(mapTable.containsKey(complement) && mapTable.get(complement) != i){
                return new int[]{i, mapTable.get(complement)};
            }
        }
        return new int[]{0,0};
    }
}

时间复杂度:O(n)

空间复杂度:O(n)

3.一遍哈希表

先判断hashtable中有没有满足要求的,再向hashtable插入元素和其对应下标。(插入之前判断,不会发生下标相同的元素相加等于target的情况)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> mapTable = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            int complement = target - nums[i];
            if(mapTable.containsKey(complement)){
                return new int[]{i, mapTable.get(complement)};
            }
            mapTable.put(nums[i], i);        
        }
        return new int[]{0,0};
    }
}

时间复杂度:O(n)

空间复杂度:O(n)

参考:【LeetCode】给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。_给定一个整数数组nums和一个目标值-CSDN博客

c++ leetcode 力扣 1. 两数之和 这是力扣的第一题 两数之和 题目是这么描述的: 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 阅读详情

相关推荐

实证研究之|stata清洗charls数据

stata

qq_45313933的博客 6699

LeetCode力扣真题解惑第2篇 —— 力扣第1题:两数之和

LeetCode力扣真题解惑第2篇 —— 力扣第1题:两数之和 1. 两数之和。 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetCode) 链接:https://le

浮生若梦,云游四方 497

【简单】力扣算法题解析LeetCode1两数之和

本文介绍了在整数数组中寻找两数之和等于目标值的算法。通过哈希表优化查找过程,将时间复杂度从O(n²)降至O(n)。关键思路是边遍历边检查补数是否存在,避免重复计算。Java实现中预分配哈希表容量,单次遍历时先检查后存储,确保高效性和正确性。算法通过示例验证,时间复杂度O(n),空间复杂度O(n)。

ylumwd的博客 701

【力扣】1两数之和

系列文章目录 【力扣】1两数之和 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分

一个卑微的java开发 1534

Leetcode力扣——1.两数之和

LeetCode第一题 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。...

qq_52222102的博客 1987

leetcode/力扣第1两数之和

malloc(2*sizeof(int)),这就是请求了两个int大小的内存,它默认返回void*,也就是无类型定义的,所以需要强制转换一下。如(int*)malloc(2*(sizeof(int)));所以 int* result = (int*)malloc(2*sizeof(int));和free的使用,malloc本质是在堆上请求分配内存,请求多大的呢,比如。:把任意大小的数据,通过某种函数映射成固定大小的值,这个值就是。:用哈希值快速索引数据的结构。找到,返回 [0,1]

m0_49366142的博客 457

day26【LeetCode力扣】1.两数之和

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。整数,并返回它们的数组下标。

canGfly的博客 1227

【力扣LeetCode1 两数之和

题目描述(难度易) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 链...

Jiewang的博客 226

每日一题一一LeetCode1. 两数之和 - 力扣(LeetCode

我们可以创建一个Hash表,遍历nums数组,每次询问Hash表中是否存在(target-nums[i]),如果存在,直接返回下标值即可。如果不存在就当前元素为键,其对应的下标为值放入哈希表中。本题的要求是给你一个数组,然后让你从中找出两个值,他们的和为target,然后返回这两个数的下标。直接双层遍历,取两个不同的数组中的元素相加为target,直接返回它的下标。

blue的博客 427

力扣(合并区间)

给定一组可能重叠或相邻的整数区间,合并所有重叠或端点相接的区间,返回不重叠的最小区间列表。例如输入 [[1,3],[2,6],[8,10],[15,18]],输出 [[1,6],[8,10],[15,18]]。核心是先按左端点升序排序,再单次线性扫描完成合并,避免暴力两两比较。

weixin_52811458的博客 299

LeetCode 155. 最小栈|Python 解法详解

这道题的关键是:使用主栈保存数据,辅助栈在每一层同步保存“截至当前位置的最小值”。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

a1250467048的博客 236

LeetCode 1. 两数之和 | 从暴力枚举到哈希表最优解 + 空间换时间思想全复盘

文章摘要 题目要求在数组中找到两数之和等于目标值的下标。核心思路是优化查找效率: 暴力法:双重循环枚举所有数对,时间复杂度O(n²),效率低但易实现。 哈希表优化:利用哈希表O(1)查找特性,遍历时存储已访问元素,每次计算差值并查询,时间复杂度降至O(n)。关键细节是先查后存,避免自匹配。 代码实现:哈希表法通过一次遍历完成,空间换时间,边界处理需注意空数组和不足两元素的情况。 常见错误:内层循环起始点、哈希表键值设计、立即返回结果等易错点需警惕。 面试要点:优先选择哈希表解法,解释与暴力法的差异,强调时间

yc2284238579的博客 256

LeetCode //MySQL - 1204. Last Person to Fit in the Bus

This SQL query solves the problem of finding the last person who can board a bus without exceeding the 1000 kg weight limit. The solution involves: Calculating a running total of weights ordered by boarding turn using a window function Filtering to only in

Made in Code 367

leetcode153. 寻找旋转排序数组中的最小值js

本文介绍了在旋转排序数组中寻找最小值的二分查找算法。通过比较中间元素与数组末尾元素,可以确定最小值所在区间:若中间值大于末尾值,则最小值在右侧;否则在左侧或当前位置。文章提供了两种实现方式,第一种通过样例总结返回nums[l],第二种采用更标准的二分写法,确保循环结束时left==right。两种方法时间复杂度均为O(logn),适用于解决LeetCode相关题目。关键点在于利用旋转数组的特性缩小搜索范围。

2402_83244812的博客 150

LeetCode //C - 1203. Sort Items by Groups Respecting Dependencies

This problem involves sorting items with group constraints and dependency relations. The key steps are: Assign unique groups to items with no group (-1) Build dependency graphs for both items and groups Perform topological sorting on both graphs If both so

Made in Code 373

LeetCode hot100——最大子数组和

给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。nums = [1]123如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的求解。

weixin_42927227的博客 212

10.LeetCode算法习题讲解--滑动窗口--最大连续为一的个数

利用滑动窗口解决最大连续1的个数

Jammy_1的博客 219

栈和队列专题(三):LeetCode 622. 设计循环队列|数组环形复用 + front/rear 边界详解

本文详细讲解了循环队列的设计与实现,重点分析了如何利用数组实现环形结构以避免空间浪费。文章首先通过示例说明普通数组队列的"假溢出"问题,然后提出循环队列的解决方案。核心内容包括:1. 采用牺牲一个存储位置的方案区分队列空满状态;2. 明确front和rear指针的语义(front指向队首元素,rear指向下一个可插入位置);3. 使用取模运算实现下标的循环移动。文章完整实现了LeetCode 622题要求的全部接口,并分析了各种边界情况,特别是队尾元素的获取方法。最后对比了数组实现与链式

Luminousone的博客 470

LeetCode 3597.分割字符串

时间复杂度:O(n) 或 O(n∣Σ∣),其中 n 是 s 的长度,∣Σ∣=26 是字符集合的大小。空间复杂度:O(n) 或 O(n∣Σ∣)。只要当前段是唯一的,就将其加入段列表,标记为已经出现过,并从下一个下标开始构建新的段。因此,最终输出为 [“a”, “b”, “bc”, “c”, “cc”, “d”]。输出: [“a”,“b”,“bc”,“c”,“cc”,“d”]因此,最终输出为 [“a”, “aa”]。输入: s = “abbccccd”输入: s = “aaaa”输出: [“a”,“aa”]

tus00000的博客 221

【异常】Claude CLI / Claude Code 命令行工具 “claude 不是内部或外部命令“ 报错完整解决方案

摘要:Windows系统执行Claude命令报错"'claude'不是内部或外部命令",主要原因是环境变量配置问题。解决方案包括:1)通过npm全局安装时需加-g参数并重启终端;2)检查Node.js环境及npm全局路径是否加入系统PATH;3)对于Claude Code独立安装版,需手动添加.local/bin路径到环境变量。常见错误包括安装不完整、权限不足或路径未自动配置,按照对应场景排查即可解决。

奶爸的编程之路,也就一周冷个三天 7170

基于改进二进制粒子群算法的配电网重构(matlab代码)

配电网重构是指在满足配电网运行基本约束的前提下,通过改变配电网中一个或多个开关的状态对配电网中一个或多个指标进行优化。本代码以一种改进二进制粒子群算法为例,进行配电网的重构研究。本代码目标函数为配电网有功网损最小,可自行修改为其他函数。传统二进制粒子群算法容易陷入局部最优。针对这一问题,本代码从两个方面进行改进:1.初始化和更新粒子时考虑配电网拓扑约束以缩小粒子搜索范围,增强算法收敛能力;2.加入变异的机制。采用IEEE33节点系统作为算例,算法运行时重构过程通过动画进行动态显示;运行结束后输出重构前后系统节点电压的对比曲线图。

下一篇: 【鸿蒙开发ArkTS】async await 与Promise静态函数的联动使用
小狗敲代码
博客等级 码龄5年 93粉丝 · 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值