提交六次的代码——LeetCode学习笔记1

提交六次的代码——LeetCode学习笔记1嘿!这里是正在学习编程的CH。最近在网上搜索有关LeetCode的题目解答,发现解答并不多,于是也来做一个。这是第一篇文章,希望大家喜欢!初来乍

嘿!这里是正在学习编程的CH。

最近在网上搜索有关LeetCode的题目解答,发现解答并不多,于是也来做一个。这是第一篇文章,希望大家喜欢!

初来乍到,请多关照!


第一次听说LeetCode是在b站,当时为了找一些题目巩固自己的基础找练习的网站,于是找到了这个几乎是程序员必知的网站——

力扣leetcode-cn.com/?utm_source=LCUS&utm_medium=ip_redirect&utm_campaign=transfer2china

在上面就开始练习,就开始从第一题做起。


以下进入正题:题目要求是这样的:

提交六次的代码——LeetCode学习笔记1

第一次是一次错误,就不给大家展示了。

第二次我想了想,要输出一个一维数组就要先设定一个

int[] nums2 = new int[2];

代码100分

然后要做到从nums里面找到两个数nums[i]和nums[j]使得加起来正好是target,那么就套两层循环并最后在nums2当中填进去符合条件的i,j并最后输出nums2.所以第二次的总体代码如下:

代码100分class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] nums2 = new int[2];
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    nums2[0] = i;
                    nums2[1] = j;
                }
            }
        }
        return nums2;
    }
}

但是最后令我没有想到的是:这两个要输出的数反了!

于是再改第三版:

这次把i,j调换一下:

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

这次顺利通过!


但是仔细一看,

提交六次的代码——LeetCode学习笔记1

7%?

改!

第四版:看见了官方标答,里面有用到HashMap,于是直接上:(利用HashMap的快速查询的特性)

代码100分class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] nums2 = new int[2];
        Map<Integer,Integer> map1 = new HashMap<Integer,Integer>();
        for(int i = 0; i < nums.length; i++) {
            if(map1.containsKey(target - nums[i])){
                nums2[0] = map1.get(target - nums[i]);
                nums2[1] = i;
            }
            map1.put(nums[i],i);
        }
        return nums2;
    }
}

这次发现果然,运行时间小了很多。看来就是for的问题。


但是再仔细一看:

提交六次的代码——LeetCode学习笔记1

47%?

再改!

(严于律己,逃)第五版没啥好说的,也是一次错误。

第六版:彻底放弃for,利用while再次将时间缩短:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map1 = new HashMap<Integer,Integer>();
        int j = 0;
        while (j < nums.length) {
            if(map1.containsKey(target - nums[j])) {
               return new int[]{map1.get(target - nums[j]) , j};
            }
            map1.put(nums[j] , j++);
        }
        return new int[0];
    }
}

再一看:

提交六次的代码——LeetCode学习笔记1

终于!这上了优秀线才舒服。


附上六次提交的过程。最后一版是我改到的最好的版本。

提交六次的代码——LeetCode学习笔记1

再附一个0ms(100%)的:

import java.util.HashMap;

class Solution {
    public int[] twoSum(int[] nums, int target) {

        HashMap<Integer, Integer> map = new HashMap<>();
        int left = 0;
        int right = nums.length - 1;

        while (left <= right) {
            if (map.containsKey(target - nums[left])) {
                return new int[]{map.get(target - nums[left]), left};
            }
            map.put(nums[left], left++);
            if (map.containsKey(target - nums[right])) {
                return new int[]{map.get(target - nums[right]), right};
            }
            map.put(nums[right], right--);
        }

        return new int[0];
    }
}

学习编程ing,想一起的小伙伴私信哦~感谢各位!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4189.html

(0)
上一篇 2023-04-03 10:00
下一篇 2023-04-01

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注