977.有序数组的平方
- 思路一:暴力解法-先将切片的元素全部转换成正数,再对切片进行排序,最后再遍历切片保存原切片中每个元素的平方值
- 代码
ret := make([]int, len(nums))
for i := range nums {
if nums[i] < 0 {
ret[i] = -nums[i]
} else {
ret[i] = nums[i]
}
}
sort.Ints(ret)
ret1 := make([]int, len(ret))
for i := range ret {
ret1[i] = ret[i] * ret[i]
}
return ret1
- 思路二:双向指针-比较当前左右两个指针指向元素平方指后的大小,将大指存储到结果切片中,并移动指针
- 代码
l, r := 0, len(nums)-1
ret := make([]int, len(nums))
k := len(ret) - 1
for l <= r {
if nums[r] * nums[r] >= nums[l] * nums[l] {
ret[k] = nums[r] * nums[r]
r--
k--
} else {
ret[k] = nums[l] * nums[l]
l++
k--
}
}
return ret
209.长度最小的子数组
- 思路一:暴力解法(会超时)
- 代码:
var sum int
res := math.MaxInt32
for i := 0; i < len(nums); i++ {
sum = 0
if sum >= target {
return 1
}
for j := i; j < len(nums); j++ {
if sum + nums[j] >= target {
if res < j - i + 1 {
res = res
} else {
res = j - i + 1
}
break
}
sum += nums[j]
}
}
if res == math.MaxInt32 {
return 0
} else {
return res
}
- 思路二:双指针-通过滑动窗口解题,从前往后遍历切片,依次累加,如果发现此时累加和大于target,就减去最左边的值,然后将指针右移一位,继续判断累加和,直至累加和不满足条件
- 代码
res := math.MaxInt32
sum := 0
i := 0
for j := 0; j < len(nums); j++ {
sum += nums[j]
for sum >= target {
sub := j - i + 1
if res > sub {
res = sub
} else {
res = res
}
sum -= nums[i]
i++
}
}
if res == math.MaxInt32 {
return 0
}
return res
标签:977,return,nums,res,sum,随想录,ret,len,数组
From: https://www.cnblogs.com/xiaoxu365/p/16718378.html