Leetcode之2Sum问题
来源:互联网 发布:东莞数据恢复 dgfix 编辑:程序博客网 时间:2024/06/15 18:33
问题描述:
给定一个整数数组,找出在数组中两个数字相加的和等于给定数字的下标,例如,对于输入数组为[2,7,11,15],指定的数字为9,因为2+7=9,所以最后返回的是2和7对应的下标[0,1]
该问题可以通过map数据类型来实现,map的key表示当前数组第i个位置的数字的值,value值存储当前位置i,在遍历数组的过程中,如果发现在map中包含了key值为target-a[i]的键,那么此时只需要找到对应的value就是我们要求的下标。具体的代码实现如下:
//利用map来解决这个问题 public int[] twoSum(int[] nums, int target){ int [] index=new int[2]; Map<Integer,Integer> p=new HashMap<Integer,Integer>(); for(int i=0;i<nums.length;i++){ if(p.containsKey(target-nums[i])){ index[0]=i; index[1]=p.get(target-nums[i]); Arrays.sort(index); return index; } p.put(nums[i], i); } return index; }此问题也可以通过查找的方法来实现,我们可以现在数组中找到相加的值为target的两个数字,再根据数字找到对应的下标即可,首先对数组进行排序,在这里需要一个辅助数组来存储原始数组。对排序之后的数组设置两个指针i,j,指针i指向数组的第一个元素,另一个指针j指向数组的最后一个元素,如果此时a[i]+a[j]==target的话,那么这是的两个数字就是我们需要找的数字,如果a[i]+a[j]<target的话,说明二者的和太小,此时需要移动i指针,如果a[i]+a[j]>target的话,说明现在的和太大,此时需要移动j指针,在找到满足条件的两个数字之后,此时再遍历辅助数组,从辅助数组中找到这两个数字对应的下标,具体的代码如下所示:
//利用双指针的方法解决数组中两个数字相加和为某一个target的问题 public int[] twoSum(int[] nums, int target) { if(nums==null||nums.length==0){ return null; } int []nums2=Arrays.copyOf(nums, nums.length); Arrays.sort(nums); int j=nums.length-1; int i=0; int [] r=new int[2]; while(i<j){ if(nums[i]+nums[j]==target){ r[0]=nums[i]; r[1]=nums[j]; break; }else if(nums[i]+nums[j]<target){ i++; }else if(nums[i]+nums[j]>target){ j--; } } int []index=new int[2]; for(int k=0;k<nums2.length;k++){ if(nums2[k]==r[0]){ index[0]=k; break; } } for(int l=nums2.length-1;l>0;l--){ if(nums2[l]==r[1]){ index[1]=l; break; } } return index; }
阅读全文
0 0
- Leetcode之2Sum问题
- 【Leetcode】之Two Sum问题
- 【Leetcode】之3sum问题
- leetcode之n Sum 问题
- leetcode之3Sum问题
- leetcode之Two Sum问题
- leetcode 之4Sum问题
- leetcode之Combination Sum 问题
- leetcode之2sum
- leetcode之3Sum Closest 问题
- leetcode之Combination Sum II 问题
- leetcode之Combination Sum III 问题
- Leetcode之Minimum Path Sum 问题
- Leetcode之Minimum Size Subarray Sum 问题
- Leetcode之Subarray Sum Equals K问题
- LeetCode 求和问题总结(2sum,3sum,ksum)
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- GO学习系列:defer的使用
- java继承
- HTML学习笔记
- python 反弹shell
- DP——Luogu1941 [NOIP2014]飞扬的小鸟
- Leetcode之2Sum问题
- CentOS7.0下安装通用版MySQL5.7.18
- 最大公约数和最小公倍数
- nginx 配置虚拟主机步骤
- 【C语言】在VC中使用gotoxy函数实现光标的移动
- python 元类的理解
- 欢迎使用CSDN-markdown编辑器
- 5-9 字符串转换成十进制整数 (15分)
- jzoj100023 【NOIP2016提高A组模拟7.6】塔