【数据结构与算法】双指针思想——两数之和
两数之和 II - 输入有序数组
LeetCode:两数之和 II - 输入有序数组
题目描述:
给定一个已按照升序排列?的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1?必须小于?index2。
示例:
输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] 解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
思想:
使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。
- 如果两个指针指向元素的和 sum == target,那么得到要求的结果;
- 如果 sum > target,移动较大的元素,使 sum 变小一些;
- 如果 sum < target,移动较小的元素,使 sum 变大一些。
代码:
class Solution { public int[] twoSum(int[] numbers, int target) { int i=0; int j=numbers.length-1; int[] res=new int[2]; while(i<j){ if(numbers[i]+numbers[j]==target){ res[0]=i+1; res[1]=j+1; break; }else if(numbers[i]+numbers[j]>target){ --j; }else{ ++i; } } return res; } }
两数之和
LeetCode:两数之和
题目描述:
给定一个整数数组 nums?和一个目标值 target,请你在该数组中找出和为目标值的那?两个?整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思想:
使用map键值对列表;循环遍历数组,每访问一个元素,将其值和下标存入map中;每次循环访问时,查找map中是否已存在与它和为target的key,若存在则输出此时的 i 和该key对应的value。
代码:
class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> temp =new HashMap<>(); int[] res=new int[2]; for(int i=0;i<nums.length;++i){ if(temp.containsKey(target-nums[i])){ res[0]=i; res[1]=temp.get(target-nums[i]); return res; }else{ temp.put(nums[i],i); } } return res; } }
相关推荐
EdwardSiCong 2020-11-23
yungpheng 2020-10-19
jipengx 2020-11-12
橄榄 2020-11-03
lyqdanang 2020-11-02
wservices 2020-10-30
onepiecedn 2020-10-29
数据人 2020-10-26
dfphoto 2020-10-16
hackerlpy 2020-09-07
tianyayi 2020-08-16
Dullonjiang 2020-08-15
fengling 2020-08-15
wordmhg 2020-08-06
guotiaotiao 2020-08-06
zhangsyi 2020-07-28
千锋 2020-07-27
ahnjwj 2020-07-28