Leetcode之2Sum问题

问题描述:

       给定一个整数数组,找出在数组中两个数字相加的和等于给定数字的下标,例如,对于输入数组为[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 p=new HashMap();
		 for(int i=0;i
       此问题也可以通过查找的方法来实现,我们可以现在数组中找到相加的值为target的两个数字,再根据数字找到对应的下标即可,首先对数组进行排序,在这里需要一个辅助数组来存储原始数组。对排序之后的数组设置两个指针i,j,指针i指向数组的第一个元素,另一个指针j指向数组的最后一个元素,如果此时a[i]+a[j]==target的话,那么这是的两个数字就是我们需要找的数字,如果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(itarget){
				 j--;
			 }
		 }
		 
		 int []index=new int[2];
		 for(int k=0;k0;l--){
			 if(nums2[l]==r[1]){
				 index[1]=l;
				 break;
			 }
		 }
		 return index;   
	    }




你可能感兴趣的:(Leetcode)