力扣算法题:1、两数之和
题目:
给定一个整数数组 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]
链接地址:https://leetcode.cn/problems/two-sum/description/
虽然说这道题的难度标为简单,但是我个人也是花费了不少时间才做出来的,提交了好几次代码才勉强成型的算法。
我的思路是,如果遍历的过程中找到了被target的值减去元素的值的差在数组之中,且这个差值在数组中不是重复的,那么就直接通过index查找这两个值得下标。
如果差值在数组中重复,则先找出第一个元素并根据第一个元素的下标值把数组分成两个小的数组,再从第二个小数组中找到这个值的下标值并加上第一个小数组的长度,那么就会等于原有数组的下标值
nums = [2,7,11,16]
nums2 = [4,9,9]
target = 18
class Solution(object):
def twoSum(self, nums, target):
# 遍历给出的数组
for i in nums:
# 如果数组中能组成target的值都是唯一的
if target - i in nums and target != i * 2:
return nums.index(i),nums.index(target - i)
# 如果组成target的值不唯一,则以第一个值为分割点把数组分成两段
# 再用第二段找出第二个值
elif nums.count(target-i) > 1:
first = nums[:nums.index(i)+1]
last = nums[len(first):]
return first.index(i) , len(first)+last.index(i)
factor = Solution()
print('第一个数组的可能性组合:',factor.twoSum(nums,target),
'\n第二个数组的可能性组合:',factor.twoSum(nums2,target))
result:
>>>第一个数组的可能性组合: (0, 3)
第二个数组的可能性组合: (1, 2)

浙公网安备 33010602011771号