当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > LeetCode(golang):283、移动零

LeetCode(golang):283、移动零

2020年07月17日  | 移动技术网IT编程  | 我要评论

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]


 

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

解法一

解析

直接遍历数组,从头开始,先将零位标记,然后向后遍历,碰到非零的就向前换位,直到遍历完全。

答案

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网