第一题:寻找文件副本

image.png
代码及思路
//题目说的很抽象,但实际上就是返回数组中含有重复数字的值,而且只需要返回其中之一.
func findRepeatDocument(documents []int) int {
//错位遍历数组,对比documents[i]和documents[j],若想等直接返回值相等的值即可
for i := 0; i < len(documents)-1; i++ {
for j := i + 1; j < len(documents); j++ {
if documents[i] == documents[j] {
return documents[j]
}
}
}
return -1
}
此外还做了个几乎可以说是前面的题的换皮的题,用的是看寻找文件副本的更优解时了解的使用哈希集合的方法

image.png
代码及思路
func containsDuplicate(nums []int) bool {
same := make(map[int]bool)
for _, num := range nums {
if same[num] { //等价于 val := same[num] ; if val == true{}
return true //遇到重复时返回true
}
same[num] = true //标记第一次出现的数字
}
return false
}
第二题:是否所有1都至少相隔k个元素

image.png
代码及思路
// 是否所有 1 都至少相隔 k 个元素
func kLengthApart(nums []int, k int) bool {
cnt := k //初始化cnt为k,避免第一个1被判定为false.
for i := 0; i < len(nums); i++ {
if nums[i] != 1 {
cnt++ //遍历nums,在下次遇到1之前,cnt++
} else if cnt < k {
return false //只要有一个的间隔小于k,都判定为错
} else {
cnt = 0 //重置间隔计数
}
}
return true
}