笑话网站源码带wap网站网站怎么做代理
笑话网站源码带wap,网站网站怎么做代理,博客网站模版,学前端什么网站好力扣283#xff1a;移动零 要点 什么情况下使用双指针 目录1. 本题思路2. 什么情况下使用双指针3. 本题代码1. 本题思路
此题大体思路#xff1a;
定义左右指针都在0处左指针不动#xff0c;右指针遍历停止条件#xff1a;右指针指向不为0的元素停止行为#xff1a;交换…力扣283移动零要点什么情况下使用双指针目录1. 本题思路2. 什么情况下使用双指针3. 本题代码1. 本题思路此题大体思路定义左右指针都在0处左指针不动右指针遍历停止条件右指针指向不为0的元素停止行为交换左右指针的元素接着左指针向左移一位2. 什么情况下使用双指针在算法题中双指针是一种非常常用的优化技巧核心思想是利用两个变量指针遍历数据结构通常是数组或链表通过某种协同移动的方式将暴力的多重循环优化为单层循环从而将时间复杂度从 O(n²) 降到 O(n)。简单来说当你发现题目需要在有序或存在某种单调性的结构中寻找特定关系或者需要原地处理时通常可以考虑使用双指针。当你读题时如果发现以下线索可以优先尝试双指针思路1. 数据有序 题目明确说了是有序数组/链表或者你可以通过排序让它变得有序在不要求返回原顺序的情况下。 2. 要求 O(1) 额外空间 题目要求你原地修改不能使用额外数组/哈希表。双指针通常只需要常数级空间。 3. 子串/子数组问题 特别是涉及“连续”、“最长”、“最短”的约束条件。 4. 链表操作 涉及环、交点、倒数第k个节点、中点等问题。3. 本题代码classSolution{publicvoidmoveZeroes(int[]nums){// 1. 定义左右指针都在0处intleft0;intright0;// 2. 左指针不动右指针遍历for(;rightnums.length;right){// 3. 停止条件右指针指向不为0的元素if(nums[right]!0){// 4. 停止行为交换左右指针的元素接着左指针向左移一位inttmpnums[left];nums[left]nums[right];nums[right]tmp;left;}}}}