leetCode 1. Two Sum

来源:互联网 发布:c 面向对象编程 编辑:程序博客网 时间:2024/06/06 02:12

看似是一道简单的题,使用双层for循环,依次取值,和之后的值依次相加,知道和为期望值sh时输出,时间复杂度O(n²)

public int[] twoSum(int[] nums, int target) {        int result[] = new int[2];        int length = nums.length;        for (int i = 0; i < length; i++){            for(int j = i+1; j<length;i++)            {                if(nums[i] + nums[j] == target){                    result[0] = i;                    result[1] = j;                    return result;                }            }        }        return result;    }

结果性能截图
这里写图片描述

上网搜的高性能算法,遍历一遍数组后就可以获得结果,思路初始化一个map,key为数组的值,value为数组的角标,一次取值v,如果Map.get(target-v)存在,则返回,否则将其值放入map,减少了比较的算法和一层for循环

 public int[] twoSum(int[] nums, int target) {        Map<Integer,Integer> map = new HashMap<>();        int arr[]= new int[2];        int len = nums.length;        for(int i = 0; i< len;i++){            if(map.get(target-nums[i]) != null && map.get(target-nums[i]) >= 0)            {                arr[0] = map.get(target-nums[i]);                arr[1] = i;                return  arr;            }else{                map.put(nums[i],i);            }        }        return arr;    }

性能截图
这里写图片描述

原创粉丝点击