Leetcode学习初篇——两数之和

 对于这道题,我是用java做的,一通百通了。话不多说,先贴出自己的代码:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int i=0;
        int j=0;
        for(i=0;i<nums.length;i++){
            int a=nums[i];
            int b=target-a;
            if(getIndex(nums,b)!=-1){
                j=getIndex(nums,b);
                if(i!=j)
                    break;
            }
        }
        int []result=new int[2];
        result[0]=i;
        result[1]=j;
        return result;
    }
    public static int getIndex(int[] arr, int value) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == value) {
                return i;
            }
        }
        return -1;//如果未找到返回-1
    }
}

对于这道题,我本是不想使用双重循环遍历数组的方法去解,结果思索许久,写出来的代码,实质上还是双重循环,颇感无奈

运行结果如上

但这样的结果我并不满意。于是,我参考了其他大牛的代码,写出了如下代码:


class Solution {
    public int[] twoSum(int[] nums, int target) {
        List<Integer> list = new ArrayList();
        int [] result=new int[2];
        for(int i=0;i<nums.length;i++){
            int a=target-nums[i];
            if(list.indexOf(a)!=-1){
                result[1]=i;
                result[0]=list.indexOf(a);
                break;
            }
            list.add(nums[i]);
        }
        return result;
    }
}

 虽然程序复杂度O降低了,但运行速度反而下降了,不过消耗的内存却是减少了

在学习过程中我看到了一位大牛的代码,运行效率之高,令人叹为观止

扫描二维码关注公众号,回复: 8862005 查看本文章

 

这道题的核心,我认为还是要从哈希表入手,减小时间复杂度,这样就能提高实际效率

发布了25 篇原创文章 · 获赞 3 · 访问量 451

猜你喜欢

转载自blog.csdn.net/qq_39377543/article/details/103962981