自己视频怎么上传网站,wordpress 七牛云 ssl,WordPress大前端dux,怎么做县城分类信息网站题目#xff1a;给定一个数组 nums#xff0c;编写一个函数将所有 0 移动到数组的末尾#xff0c;同时保持非零元素的相对顺序。
请注意 #xff0c;必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums [0,1,0,3,12]
输出: [1,3,12,0,0]示例 2:
输入: …题目给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。
请注意 必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums [0,1,0,3,12]
输出: [1,3,12,0,0]示例 2:
输入: nums [0]
输出: [0第一种解题方法代码第一种方法时间复杂度为O(n)。
代码
class Solution {public void moveZeroes(int[] nums) {/*解题思路双指针遍历数组1.使用一个指针 i 遍历数组 nums。2.使用另一个指针 j 记录非零元素应该放置的位置。3.当遇到非零元素时将其移动到 j 指向的位置并将 j 向前移动。4.遍历完成后从 j 开始到数组末尾的位置全部填充 0。*///记录非0元素存放的位置int j 0;//遍历数组for(int i 0;inums.length;i){if(nums[i] ! 0){nums[j] nums[i];j;}}//填充0while(jnums.length){nums[j] 0;j;}}
}
第二种解题方法代码 代码
class Solution {public void moveZeroes(int[] nums) {/*解题思路类似冒泡排序遍历数组nums查找到0元素和非0元素时交换它们的位置将0元素向后移一直到0元素都在数组的末尾*///嵌套for循环遍历numsfor(int i 0;inums.length;i){for(int j 0;jnums.length -i -1 ;j){//查找到0元素和非0元素时交换它们的位置if(nums[j] 0 nums[j1] ! 0){//类似于交换2杯水需要一个中间变量int temp nums[j];nums[j] nums[j1];nums[j1] temp; }}}}
} 第二种解题方法效率比较低需要花费的时间久嵌套for循环的时间复杂度为O(n^2)。
总结个人认为双指针遍历循环更简单高效时间空间复杂度更小因此个人更加推荐第一种解题方法。第二种方法类似于冒泡排序在这篇博客中提供一种解题思路。继续加油~