这次刷的是leetcode的14天数据结构题目集,这是第一天的题目集✨🎉
最近在看王道的数据结构和《小灰漫画算法》,顺便练习一下Golang。

存在重复元素

给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

Example1:

1
2
输入: [1,2,3,1]
输出: true

Example2:

1
2
输入: [1,2,3,4]
输出: false

Example3:

1
2
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

解题思路&题解

已知数组是一个整型数组,故我们可以对数组进行排序,然后遍历数组。
通过判断相邻两个元素是否相等,从而判断数组是否有重复元素。

题解如下:

1
2
3
4
5
6
7
8
9
func containsDuplicate(nums []int) bool {
sort.Ints(nums)
for i := 1; i < len(nums); i++ {
if nums[i] == nums[i-1] {
return true
}
}
return false
}

最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

Example1:

1
2
3
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

Example2:

1
2
输入:nums = [1]
输出:1

Example3:

1
2
输入:nums = [0]
输出:0

Example4:

1
2
输入:nums = [-1]
输出:-1

Example5:

1
2
输入:nums = [-100000]
输出:-100000

解题思路&题解

这道题可以说是浙大数据结构讲的 最大子列和 问题的变形,第一时间想到的是在线处理。
但这里需要注意输入的内容可以是负的,因此将原本的在线处理稍微变形。for循环的时候将已经遍历的元素累加起来,如果当前元素和累加结果相加大于当前元素nums[i - 1] + nums[i] > nums[i])则证明改子列不会变小,然后再和最大值进行比较。

题解如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
func maxSubArray(nums []int) int {
max := nums[0]

for i := 1; i < len(nums); i++ {
if(nums[i - 1] + nums[i] > nums[i]){
nums[i] += nums[i - 1]
}
if(nums[i] > max) {
max = nums[i]
}
}
return max
}