😶一分耕耘,一分收获😶
💪💪💪此系列仅为记录本人补充学习数据结构相关知识,有兴趣的,大家可以共同学习👏👏👏
[= 存在重复元素 =]
题目描述
解题思路
根据描述,如果数组中任意值出现两次,返回 true,否则返回 false
思路一:利用map,遍历数组,key 为值,value为其出现次数默认1,最后遍历map判断是否有大于1则有出现重复元素,返回true
思路二:对数组进行排序,如果出现重复元素则必然是相邻两个元素,仅需判断相邻两个元素值是否相等即可
解题方法
// 方法一
func containsDuplicate(nums []int) bool {
m := map[int]int{}
for i:=0;i<len(nums);i++{
if _,ok := m[nums[i]]; ok {
m[nums[i]] += 1
} else {
m[nums[i]] = 1
}
}
for _,v := range m{
if v > 1 {
return true
}
}
return false
}
// 方法二
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
}
【= 最大子序和 =】
题目描述
解题思路
首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans
如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加上当前遍历数字
如果 sum <= 0,则说明 sum 对结果无增益效果,需要舍弃,则 sum 直接更新为当前遍历数字
每次比较 sum 和 ans的大小,将最大值置为ans,遍历结束返回结果
解题方法
// 方法一
func maxSubArray(nums []int) int {
ans, sum := nums[0], 0
for i:=0; i<len(nums); i++ {
if sum > 0 {
sum += nums[i]
} else {
sum = nums[i]
}
if sum > ans {
ans = sum
}
}
return ans
}
// 方法二
// 类似于方法一,区别就是相对于方法一减少中间变量sum,将最新sum赋值于nums[i]
// 此方法会改变原数组中元素
func maxSubArray(nums []int) int {
max := nums[0]
for i := 1; i < len(nums); i++ {
if nums[i]+nums[i-1] > nums[i] {
nums[i] += nums[i-1]
}
if nums[i] > max {
max = nums[i]
}
}
return max
}