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
判断,如果匹配上了,就创建一个新的一维数组用来存储i
和j
(5)最终这个twoSum
是int类型,所以我们需要一个返回值,由于是个数组,所以返回值类型可以设定为一个空数组(别杠,其它的不行,我试过)