题目链接
思路
先考虑到特殊情况,nums数组元素为0和1,直接返回false
设置计数变量count
,将第一次遍历数组得到的元素与第二次遍历数组得到的元素做判断,如果两数相等,就将count
加1,在结束循环后对count
做判断,count
值不等于0返回true
,否则返回false
。
这里尤其需要注意,第一次遍历数组的下标一定比第二次遍历出的数组元素下标大,举个例子:
输入[1,2,3,1]
,判断这个数组里有没有重复元素,第一次遍历nums[0]
得到1,那么第二次遍历时肯定不能从nums[0]
开始,必须从nums[1]
开始往后累加,不然在同一个数组中,将下标相等的两个元素做比较,肯定相等,从而AC不通过。
解决
Go
1 | func containsDuplicate(nums []int) bool { |
附录,踩坑记录
第一版
创建一个shift
数组,第一步先遍历nums
数组,将每次遍历取出的num
与shift
数组里的值做判断,如果相等就代表重复,count
增1,最后在循环结束后,对count
做判断,如果不等于1,返回true
,否则返回false
。
1 | //第一版 |
第一版存在的问题
- 为什么要复制数组,直接用原来的
nums
数组做range
不可以吗? append
数组有问题- 没有考虑
nums
数组元素为1和0两种特殊情况 - 判断条件只需满足
count != 0
即可