LeetCode 1 梦开始的地方

335 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

1.1 简单题

1.1.1 LeetCode 1

1.1.1.1 题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

1.1.1.2 思路分析

(1)遇到这种题目,我的第一想法就是利用for循环来进行暴力破解,运用两层for循环去找到在数组nums中的两个数值,然后里面嵌套一个if函数去进行匹配,最终输出该数组

1.1.1.3 代码实现

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

1.1.1.4 代码详解

(1)首先拿到这个代码,我第一反应就是:欸嘿,这不是跟我写的差不多吗?

(2)由题解可以看到,作者定义了一个n变量用于存储数组nums的长度(其实我感觉没多大必要,也只是对代码美化了一下 )

(3)重点是双层for循环的理解,第一层for循环的前半部分我们可以理解,n - 1这个地方我确实思考了很长时间,为什么不能写n - 1

我的理解是这样的:它这个for循环遍历的是第一个符合target目标值的元素,length是从1开始遍历的,而数组是从0开始计数的,比如arr[0]。然后我们再看第二层for循环,为了避免与第一层for循环产生重复以至于同时选定了一个元素,所以采用i+1的方式去重。这里的i+1读者也可以理解成为数组下标,至于j为什么要小于n,自行体会~

(4)for循环理解完毕之后,接下来就是傻瓜式if判断,如果匹配上了,就创建一个新的一维数组用来存储ij

(5)最终这个twoSum是int类型,所以我们需要一个返回值,由于是个数组,所以返回值类型可以设定为一个空数组(别杠,其它的不行,我试过

今天LeetCode的第一题就到这里啦,以后会持续更新这一板块的哦,欢迎关注我!!!