码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]Two Sum

时间:2015-03-31 22:26:42      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:leetcode

题意:求出某个数组中的两个数值的和等于一个固定的target的该两个数值的下标,按从小到大的顺序.
解题思路:
1: 直接暴力遍历 复杂度O(n*n) 超时
2:先排序,再遍历 增加了空间复杂度,时间复杂度为O(N+N*log(N)+N)
3:有人建议用HashMap但是如果有重复数据就应该是不成立的,思路二的解法如下:

    public int[] twoSum(int[] numbers, int target) {
 <span style="white-space:pre">	</span>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<node> nodes = new ArrayList<node>();
        for (int index = 0 ;index< numbers.length; ++index){
            nodes.add(new node(index+1, numbers[index]));//index 从1开始
        }
        Collections.sort(nodes, new Comparator<node>() {//排序
            @Override
            public int compare(node o1, node o2) {
                return o1.value - o2.value;
            }
        });

        int i = 0, j = nodes.size()-1;

        while (i<j){
            int v1 = nodes.get(i).value;
            int v2 = nodes.get(j).value;
            if(v1 + v2 > 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;
    }


[LeetCode]Two Sum

标签:leetcode

原文地址:http://blog.csdn.net/youmengjiuzhuiba/article/details/44784317

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!