
- 题目需要不复制数组,可使用双指针。
- i指针往后遍历
- j指针指向已经排好的数组的尾部。
一开始i、j指针都指向0位置。
i指针找到第一个不为0的数,与j指针指向的数交换。
i指针找到第二个不为0的数,交换。
结束。
1 2 3 4 5 6 7 8 9 10 11 12 13
| func moveZeroes(nums []int) { j := 0 for i, v := range nums { if v != 0 { t := nums[i] nums[i] = nums[j] nums[j] = t
j++ } } }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| func maxArea(height []int) int { n := len(height) left, right := 0, n-1 ans := 0
for left < right { area := min(height[left], height[right]) * (right - left) ans = max(area, ans)
if height[left] < height[right] { left++ } else { right-- } }
return ans }
|