力扣第一题,两数之和解法

给定一个整数数组 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
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

 

提示:

    2 <= nums.length <= 104
    -109 <= nums[i] <= 109
    -109 <= target <= 109
    只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

 

 

### 解题思路

先说一下解题的思路,我是看了一下解答视频的,然后把他的代码拷过来但是看懂总是很难

索性听了一下思路,自己做了一下,再结合讲解去做

解题思路是:首先他会让你给你一个列表,在给一个数,从这这个列表中找出两个数+起来等于你给的第二个数

那怎么解决,无非是这样,先把列表的第一个数去加第二个数,判断一下等于吗?不等于再第一个数加上第三个数

听这个思路就要用到双重for循环,外循环执行一次,内循环执行多次

解决思路:首先第一个数要循环次数对不对,循环多少次?是不是你给的列表有多长,我就循环多少次

long = len(nums),就是将nums的长度给long

range就是你传个几就会执行几次

现在外循环解决了,剩下的就是内循环

比如我传入了5个数,分别是 1,3,5,6,7

那第一次循环是不是得1+3,1+5,1+6,1+7

第二次,3+5,3+6,3+7

每一次循环比上一次少一次

所以呢,就采用a+1的方式,他的循环次数是long,也就是6

每次再判断是不是相等的,nums[a]就是拿到当前索引的值

最终再返回索引!!!!

以上为我自己理解到的思路,总体来说有些肯定不细节,但这也是我作为python小白能理解得了

有什么误导概不负责哈,有什么缺点欢迎大家指正

 

class Solution:

    def twoSum(self, nums: List[int], target: int) -> List[int]:

        long = len(nums)

        for a in range(long):

            for b in range(a + 1, long):

                if nums[a] + nums[b] == target:

                    return (a, b)

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

<think>好的,我现在需要帮用户找到LeetCode第一两数之和”的C++测试代码示例。首先,我得回忆一下这个问的大致要目是给定一个整数数组和一个目标值,找出数组中个数的和等于目标值,并返回它们的下标。每个输入应该只有一个解,且同一个元素不能使用次。 用户需要的是测试代码示例,而不仅仅是解法。所以我要确保提供的代码不仅包括解决方案,还有测试用例。通常,LeetCode的问会要函数返回答案,但用户可能需要一个完整的可运行示例,包括main函数中的测试代码。 接下来,我需要检查现有的引用内容。用户提供的引用中有几个关于LeetCode的问,比如引用[1]、[2]、[3]、[4]。其中引用[1]提到了LeetCode问集算法第一的描述,但具体的代码示例可能没有直接给出。引用[2]是关于两数之和的位操作解法,引用[3]是关于字符串相加的问,引用[4]是关于链表相加的问。看起来这些引用中并没有直接给出两数之和的C++测试代码,但可能需要根据问描述来构造。 因此,我需要自己构造一个符合要的C++测试代码示例。首先,解决方案通常是一个函数,比如vector<int> twoSum(vector<int>& nums, int target)。然后,测试部分需要调用这个函数,并验证输出是否正确。 我需要确保代码的正确性。通常两数之和解法可以用哈希表来优化时间复杂度到O(n),而暴力解法则是O(n&sup2;)。这里应该提供最优解,即哈希表的实现。然后,测试用例需要包括一些基本的情况,比如示例输入,比如nums = [2,7,11,15], target = 9,应该返回[0,1]。可能还需要其他测试用例,比如有重复元素或者负数的情况。 另外,测试代码需要包括断言或者输出结果的验证。比如在main函数中调用twoSum函数后,打印结果并与预期比较。或者使用assert语句来确保正确性。 还要注意代码格式,比如正确的缩进,头文件的包含(比如#include <vector>, #include <unordered_map>, #include <iostream>等)。同时,main函数的结构应该正确,可能有多个测试用例。 现在,我需要将这些元素整合成一个完整的示例。例如,先写twoSum函数的实现,然后在main函数中定义测试用例,调用函数,输出结果。同时,确保代码符合C++标准,能够编译运行。 可能还需要处理一些边界情况,比如空数组或者无解的情况,但根据目描述,每个输入恰好有一个解,所以测试用例可以不用考虑这些。但为了代码的健壮性,可能需要添加注释说明。 最后,根据用户的要,生成相关问。比如关于时间空间复杂度,优化方法,或者不同解法比较的问。确保问与当前主相关,并且能帮助用户深入理解。</think>关于LeetCode第一"两数之和"的C++测试代码示例如下,包含核心算法和测试案例: ```cpp #include <vector> #include <unordered_map> #include <iostream> using namespace std; vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> num_map; for (int i = 0; i < nums.size(); ++i) { int complement = target - nums[i]; if (num_map.find(complement) != num_map.end()) { return {num_map[complement], i}; } num_map[nums[i]] = i; } return {}; } // 测试代码 int main() { // 测试案例1 vector<int> nums1 = {2,7,11,15}; int target1 = 9; vector<int> result1 = twoSum(nums1, target1); cout << "Test Case 1: [" << result1[0] << ", " << result1[1] << "]" << endl; // 测试案例2(包含负数) vector<int> nums2 = {-1, -2, -3, -4}; int target2 = -7; vector<int> result2 = twoSum(nums2, target2); cout << "Test Case 2: [" << result2[0] << ", " << result2[1] << "]" << endl; // 测试案例3(重复元素) vector<int> nums3 = {3, 2, 4}; int target3 = 6; vector<int> result3 = twoSum(nums3, target3); cout << "Test Case 3: [" << result3[0] << ", " << result3[1] << "]" << endl; return 0; } ``` 算法实现要点: 1. 使用哈希表存储`<数值, 索引>`的映射关系,时间复杂度$O(n)$,空间复杂度$O(n)$ 2. 通过计算补数`target - nums[i]`快速定位匹配元素 3. 单次遍历即可完成查找,避免暴力解法的$O(n^2)$时间复杂度[^1]
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值