Two Sum

以为只要保证O(n)的时间效率就可以,所以一开始是这样的HashMap做的:

    public static int[] twoSum(int[] nums, int target) {
    	int [] v = new int[2];
    	Map<Integer,Integer> map = new HashMap<Integer, Integer>();
    	for(int i=0;i<nums.length;i++){
			map.put( nums[i],i);
		}
    	for(int key : map.keySet()){
    		if(map.containsKey(target-key)){
    			v[0]=map.get(key)+1;
    			v[1]=map.get(target-key)+1;
    			break;
    		}
    	}
		return v;   
    }

后来发现一直Time Limit Exceeded,无奈就改为遍历一次的。

    public static int[] twoSum2(int[] nums, int target) {
		int[] v = new int[2];
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		for (int i = 0; i < nums.length; i++) {
			if(map.containsKey(nums[i])){
				v[0]=map.get(nums[i])+1;
				v[1]=i+1;
			}else{
				map.put(target-nums[i], i);
			}
		}
		return v;
    }
回头用C++实现一次。

你可能感兴趣的:(Two Sum)