征服leecode第一天

准备开始征服leecode了
目前的想法是做 leecode hot100

  1. 两数之和
    两数之和
    在最开始拿到的时候想排序,然后遍历,得到结果,但是这里排序会改变下标的值,于是失败。
    代码如下
public int[] twoSum(int[] nums, int target) {
        Arrays.sort(nums);
        int[] sulution = new int[2];
        for (int i = 0; i < nums.length-1; i++) {
            int num = nums[i];
            for (int j = i+1; j < nums.length; j++) {
                int numLast = nums[j];
                if(num + numLast == target){
                    sulution[0] = i;
                    sulution[1] = j;
                }
                if (numLast +num > target)
                    break;
            }
        }
        return sulution;
    }

然后第二种想法就是暴力穷举,两个for循环,当然,成功,但是效率低下

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

然后没啥想法了 看了题解之后可以使用map,于是看完后实现,效率确实高了很多

public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> hashmap = new HashMap<Integer,Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (hashmap.containsKey(target-nums[i]))
                return new int[]{i,hashmap.get(target-nums[i])};
            //key:value 数字:下标
            hashmap.put(nums[i],i);
        }
        return new int[]{};
    }

在写这个的时候突然觉得可以采用排序加map来实现一次遍历,这样的话需要用map来存数字和下标,然后将数字和下标一起排序,但是好像这样的话效率肯定是没有直接使用map好的,因为这样写首先还是要存到map里面再找一次,不如直接使用map来得快。

posted @ 2023-02-20 18:34  达杰瑞如归  阅读(16)  评论(0)    收藏  举报