leetcode 第一题

给一个包含多个数的数组和一个目标数,找出该数组内两个不同的数使其相加等于目标,输出两数的索引;

 例如int nums[] = {1,2,3,4};

        int target = 3;

       输出[0,1];

三种解决方案

一和三利用sun官方优化jdk hash查找算法可将时间复杂度降至O(n); 

二是自己想的思路,很大众很平常,不过代码忘了保存,所以也抄了答案。

我觉得主要注意 两个数要求不是同一个数,令j = i + 1即可;

package test.com;

import java.util.HashMap;
import java.util.Map;

public class Test {

	public static void main(String[] args) {

		int[] a = new int[10000];
		for(int i = 0;i < 10000;i++) {
		a[i] = i;
		}
         int c[] = new Test().twoSum2(a,12000);		
    System.out.println(c[0]+","+c[1]);
	}
	
	public int[] twoSum(int[] nums, int target) {
       long a = System.currentTimeMillis();
		Map<Integer, Integer> map = new HashMap<>();
	    for (int i = 0; i < nums.length; i++) {
	        map.put(nums[i], i);
	    }
	    for (int i = 0; i < nums.length; i++) {
	        int complement = target - nums[i];
	        if (map.containsKey(complement) && map.get(complement) != i) {
	        	long b = System.currentTimeMillis();
	        	System.out.println(b - a);
	        	return new int[] { i, map.get(complement) };
	        }
	    }
	    
	    
	    
	    throw new IllegalArgumentException("No two sum solution");
	}
	
	public int[] twoSum2(int[] nums, int target) {
		 long a = System.currentTimeMillis();
		for (int i = 0; i < nums.length; i++) {
	        for (int j = i + 1; j < nums.length; j++) {
	            if (nums[j] == target - nums[i]) {
	            	long b = System.currentTimeMillis();
		        	System.out.println(b - a);
	            	return new int[] { i, j };
	            }
	        }
	    }
	    throw new IllegalArgumentException("No two sum solution");
	}
	
	
	public int[] twoSum3(int[] nums, int target) {
	    Map<Integer, Integer> map = new HashMap<>();
	    for (int i = 0; i < nums.length; i++) {
	        int complement = target - nums[i];
	        if (map.containsKey(complement)) {
	            return new int[] { map.get(complement), i };
	        }
	        map.put(nums[i], i);
	    }
	    throw new IllegalArgumentException("No two sum solution");
	}
	//值为键,索引为值;利用已经优化过的hash查找算法;
	
}

猜你喜欢

转载自blog.csdn.net/qq_39668086/article/details/81489420