GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — 移动零-283 · Issue #26 · sl1673495/leetcode-javascript Open Labels Description
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 说明: 必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。 思路暴力法先遍历一次,找出所有 0 的下标,然后删除掉所有 0 元素,再 push 相应的 0 的个数到 var moveZeroes = function (nums) { let zeros = [] for (let i = 0; i < nums.length; i++) { if (nums[i] === 0) { zeros.push(i) } } for (let j = zeros.length - 1; j >= 0; j--) { nums.splice(zeros[j], 1) } for (let j = 0; j < zeros.length; j++) { nums.push(0) } return nums } 双指针慢指针 j 从 0 开始,当快指针 i 遍历到非 0 元素的时候,i 和 j 位置的元素交换,然 也就是说,快指针 i 遍历完毕后, [0, j) 区间就存放着所有非 0 元素,而剩余的[j, var moveZeroes = function (nums) { let j = 0 for (let i = 0; i < nums.length; i++) { if (nums[i] !== 0) { nums[j] = nums[i] j++ } } while (j < nums.length) { nums[j] = 0 j++ } } 双指针(交换位置)在上面的算法里,快指针遍历完成后,还要遍历慢指针到末尾来填充 0。实际上这题只要遇 var moveZeroes = function (nums) { let j = 0 for (let i = 0; i < nums.length; i++) { if (nums[i] !== 0) { swap(nums, i, j) j++ } } } function swap(nums, i, j) { let temp = nums[i] nums[i] = nums[j] nums[j] = temp } ActivityMetadataMetadataAssigneesLabelsProjectsMilestoneRelationshipsDevelopmentIssue actions |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |