边工作边刷题: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
标签:
leetcode
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件