边工作边刷题:70天一遍leetcode: day 56

Move Zeroes

要点:这题2个要点:保持顺序,0要到最后,所以必须从前向后处理。基本的rule就是每遇到一个非0就和下一个位置(必然为0)交换,当然要判断是否当前就是"下一个位置”,这种情况就不用交换了。
facebook还考过一道类似题,不需要0移到后面,也不需要保持顺序,只需要把非0移到前面即可。但需要最小化write operation。其实这是一个提示,这样heuristic就是已经在前面适当位置的就不要移动了,直接找还没到位的,所以要从后向前处理,同时每次找下一个被填的0位时不用从头找,从上次已找到的位置之后开始找。具体见http://pastebin.com/4X8Fk1P6

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        j = -1
        for i in xrange(len(nums)):
            if nums[i]!=0:
                if j+1!=i:
                    nums[j+1],nums[i]=nums[i],nums[j+1]
                j+=1

posted @   absolute100  阅读(87)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件
点击右上角即可分享
微信分享提示