函数接收两个变量,一个是整数数组 nums:list,另一个是目标值 target: int; 3. 如果存在两种或以上符合目标值 target 的情况,返回下标相加之和较小的数组; 4. 函数返回的值必须为一个数组,list数据类型,元素排序为正序排序,如返回 [1, 3] 符合条件,[3, 1] 不符合条件
时间: 2023-06-19 19:04:41 浏览: 93
可以使用双指针的方法来解决这个问题。
首先将数组 nums 按照元素大小进行排序,然后定义两个指针 left 和 right,分别指向数组的起始位置和末尾位置。
接着,我们可以通过计算 nums[left] + nums[right] 的值与目标值 target 的大小关系来移动指针。如果 nums[left] + nums[right] 小于 target,则将 left 指针向右移动一位;如果 nums[left] + nums[right] 大于 target,则将 right 指针向左移动一位;如果 nums[left] + nums[right] 等于 target,则找到了符合条件的两个数,记录它们的下标并返回。
如果存在两种或以上符合目标值 target 的情况,返回下标相加之和较小的数组,可以在找到第一组符合条件的两个数之后,继续移动指针寻找下一组符合条件的两个数,比较它们的下标之和,并返回下标之和较小的数组。
下面是代码实现:
```python
def twoSum(nums, target):
nums = sorted(nums)
left, right = 0, len(nums) - 1
result = []
min_sum = float('inf')
while left < right:
if nums[left] + nums[right] < target:
left += 1
elif nums[left] + nums[right] > target:
right -= 1
else:
if not result:
result = [left, right]
else:
cur_sum = left + right
if cur_sum < min_sum:
result = [left, right]
min_sum = cur_sum
left += 1
right -= 1
return result
```
阅读全文