LeetCode 977. 有序数组的平方
思路:用双指针去做,从后向前遍历两个数组,谁的平方大,谁就去放到后面。
func sortedSquares(nums []int) []int {
left := 0
right := len(nums) - 1
res := make([]int, len(nums))
n := len(nums) - 1
for left <= right{
if nums[right] * nums[right] > nums[left]*nums[left]{
res[n] = nums[right] * nums[right]
right--
}else{
res[n] = nums[left] * nums[left]
left++
}
n--
}
return res
}
LeetCode 209. 长度最小的子数组
思路:利用双指针的思想,快慢指针,快指针遍历,sum+=nums[fast],判断sum是否大于等于target,如果大于等于target,那么就移动慢指针,去减去慢指针的值,直到sum小于target。
func minSubArrayLen(target int, nums []int) int {
res := math.MaxInt32
left := 0
right := 0
sum := 0
for right < len(nums){
sum += nums[right]
right++
for sum >= target{
res = min(res, right - left)
sum -=nums[left]
left++
}
}
if res == math.MaxInt32{
return 0
}
return res
}
LeetCode 59. 螺旋矩阵Ⅱ
思路:转圈,主要是怎么处理边界的问题
func generateMatrix(n int) [][]int {
cur := 1
res := make([][]int, n)
for i, _ := range res{
res[i] = make([]int, n)
}
left, up, right, down := 0, 0, n-1, n-1
for cur <= n * n{
for i:=left; i <= right; i++{
res[up][i] = cur
cur++
}
up++
for i:=up; i <= down; i++{
res[i][right] = cur
cur++
}
right--
for i:=right; i >= left; i--{
res[down][i] = cur
cur++
}
down--
for i:= down; i >= up; i--{
res[i][left] = cur
cur++
}
left++
}
return res
}