LeetCode(golang):283、移动零
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:
[0,1,0,3,12]
输出:
[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解法一
解析:
直接遍历数组,从头开始,先将零位标记,然后向后遍历,碰到非零的就向前换位,直到遍历完全。
答案:
func moveZeroes(nums []int) {
//默认j是零位,需要替换的
j := 0
//遍历,将非0的换到j位置
for i := 0; i < len(nums); i++ {
if nums[i] != 0 {
nums[j] = nums[i]
if i != j {
nums[i] = 0
}
//将j加一位
j++
}
}
}//go语言可以用省略写法
func moveZeroes(nums []int) {
//默认j是零位,需要替换的
j := 0
//遍历,将非0的换到j位置
for i := 0; i < len(nums); i++ {
//没有零的时候,i,j一起向后加一位,有零的话就开始交换
if nums[i] != 0 {
nums[j], nums[i] = nums[i], nums[j]
j++
}
}
}
解法二
解析:
从两边开始向中间缩进,左右夹逼,i 和 j 两个高度小的就前进,直到 i 和 j 相遇,每动一步计算一下面积。关于这种理论的证明在官网有详细说明。
答案:
func maxArea(height []int) int {
max := 0
for i, j := 0, len(height) - 1; i < j; {
var minHeight int
if height[i] <= height[j] {
minHeight = height[i]
i++
}else{
minHeight = height[j]
j--
}
w := (j - i + 1) * minHeight
if w > max {
max = w
}
}
return max
}
本文地址:https://blog.csdn.net/qq_41509873/article/details/107382622
上一篇: 历史上的马岱是什么人?要怎么评价他
下一篇: idea不显示server服务