当前位置: 首页 > 后端技术 > Python

[LeetCode-1-Easy]TwoSum

时间:2023-03-26 13:10:58 Python

titlerequires给定一个整数数组,返回两个数字的索引,使得它们加起来等于一个特定的目标。您可能会假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。给定一个整数数组nums和一个目标值target,请在数组中找到和为目标值的两个整数,并返回它们的数组下标。您可以假设每个输入只有一个答案。但是,您不能在此数组中重复使用相同的元素。https://leetcode-cn.com/problems/two-sum/例子给定nums=[2,7,11,15],target=9,因为nums[0]+nums[1]=2+7=9,返回[0,1]。给定nums=[2,7,11,15],target=9,因为nums[0]+nums[1]=2+7=9,所以返回[0,1]。解题思路题目的重点是一个数不能重复使用,比如[3,2,4],3不能重复使用,所以答案应该是[1,2]而不是[0,0],这是一个音符。对于这道题,我的想法是一步步迭代优化解法。首先想到的是蛮力解决方案。1.暴力解法对列表中的每一个元素x,然后从剩下的元素中,找是否有等于target-x的值。复杂度分析:时间复杂度:O($n^2$),因为需要循环嵌套。空间复杂度:O(1)。2.循环赋值hash+循环使用hash表查找判断接下来想到的方向就是优化时间复杂度。可以把循环中寻找匹配元素的过程放到哈希表中,将所有元素x的值和下标一起存入哈希表中,寻找是否有等于target-的值-x可以在O(1)的时间复杂度内求解。并且需要注意的是,在循环判断的时候,要避免同一个位置的元素,一个元素不能重复使用。示例代码:Java版本classSolution{publicint[]twoSum(int[]nums,inttarget){int[]result=newint[2];MapnumberMap=newHashMap();for(inti=0;inumberMap=newHashMap();for(inti=0;iList[int]:number_map={}fori,numinenumerate(nums):need=target-numiftarget-numinnumber_map:return[number_map[target-num],i]number_map[num]=i复杂度分析:时间复杂度:O($n$),只需要遍历一次list,然后就是时间复杂度搜索过程的复杂度为O(1)。空间复杂度:O($n$),因为引入了额外的哈希表存储来存储n个元素。标记哈希表数组