283. 移动零
题目:
思路:
【1】置换的方式(由于0是需要移到后面,倒不如说是非零的要往前挪动,前面有多少个0就需要移动多少格,为了尽量少的动,那么明确的计算出位置只交换一次是最少的,全部非零的都移动完了,也就说明必须要先遍历一遍数组,统计0的个数,和顺便挪动非零的数值,做完了,会发现由于挪动过程中某些0会被覆盖,所以往数组后面补0,补到满足即可,这不会对那些非零的造成问题,甚至你在互换的过程中将数据变动都可以,但是这样变换的操作就会增加)
代码展示:
//时间1 ms 击败 100% //内存44.1 MB 击败 26.77% //时间复杂度:O(n,其中 n 为序列长度。每个位置至多被遍历两次。 //空间复杂度:O(1)。只需要常数的空间存放若干变量。 class Solution { public void moveZeroes(int[] nums) { int count = 0; for (int i = 0; i < nums.length; i++){ if (nums[i] == 0) { count++; }else { nums[i-count] = nums[i]; } } while (count > 0) nums[nums.length - count--] = 0; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现