[LeetCode]Two Sum

2015-07-20 17:07:11 · 作者: · 浏览: 4
题意:求出某个数组中的两个数值的和等于一个固定的target的该两个数值的下标,按从小到大的顺序.
解题思路:
1: 直接暴力遍历 复杂度O(n*n) 超时
2:先排序,再遍历 增加了空间复杂度,时间复杂度为O(N+N*log(N)+N)
3:有人建议用HashMap但是如果有重复数据就应该是不成立的,思路二的解法如下:
    public int[] twoSum(int[] numbers, int target) {
?	assert (numbers == null || numbers.length < 2);
        class node {//辅助类
            int index;
            int value;
            public node(int index, int value){ this.index = index; this.value = value; };
        }


        int[] rs = { 0, 0 };

        List
  
    nodes = new ArrayList
   
    (); for (int index = 0 ;index< numbers.length; ++index){ nodes.add(new node(index+1, numbers[index]));//index 从1开始 } Collections.sort(nodes, new Comparator
    
     () {//排序 @Override public int compare(node o1, node o2) { return o1.value - o2.value; } }); int i = 0, j = nodes.size()-1; while (i
     
       target){ j --; continue; } if(v1 + v2 == target){ rs[0] = Math.min(nodes.get(i).index, nodes.get(j).index); rs[1] = Math.max(nodes.get(i).index, nodes.get(j).index); return rs; } if(v1 + v2 < target){ i ++; continue; } } return rs; }