当前位置: 首页 > article >正文

每日一题学习笔记——移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n=nums.size();
        int count=0;
        vector<int> res;
        for(int i=0;i<n;i++){
            if(nums[i]!=0){
                res.push_back(nums[i]);
            }else{
                count++;
            }
        }
        for(int i=0;i<count;i++){
            res.push_back(0);
        }
        nums=res;
    }
};

新开一个数组的思路很简单,就是先添加不为0的数,同时计算有多少个零,然后添加到数组最后就可以了。时间复杂度基本为0,但是空间复杂度很高。而且题目要求在原数组上进行操作,因此我们还是采用双指针的思路。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n=nums.size();
        int l=0;
        int r=0;
        while(r<n){
            if(nums[r]){
                swap(nums[l],nums[r]);
                l++;
            }
            r++;
        }
    }
};

在不改变时间复杂度的情况下,降低了空间复杂度。思路也很简单,l指针永远指向第一个为0的位置,而r指针去遍历数组中的位置。


http://www.kler.cn/news/356148.html

相关文章:

  • javaweb以html方式集成富文本编辑器TinyMce
  • Java生死簿管理小系统(简单实现)
  • ORA-12541: TNS: 无监听程序
  • 【python】Pycharm输出窗口自动换行问题
  • Systemd:systemctl 命令
  • 【尚跑】2024咸阳高新区半程马拉松赛141完赛,时隔一年终于pb,天时地利人和的结果
  • 金融信创基金行业案例:某基金公司AD信创替代方案建设分享
  • YOLO11改进 | 注意力机制 | 迈向高质量像素级回归的极化自注意力【全网独家】
  • 基于SpringBoot+Vue+uniapp微信小程序的宿舍报修系统的详细设计和实现
  • 代理 IP:促进在线教育资源普及与公平的新助力
  • 数据仓库构建的两种方法:自上向下、自下向上
  • 《OpenCV计算机视觉》——人脸检测__Haar特征、级联分类器
  • nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理
  • Java项目-基于Springboot的招生管理系统项目(源码+说明).zip
  • 网络变压器在PCIe网口应用的案例
  • 《师兄啊师兄》:家国大义,不忘初心
  • Java项目-基于springboot框架的智能热度分析和自媒体推送平台项目实战(附源码+文档)
  • C++:priority_queue优先队列
  • Spring Boot视频网站:构建高性能的视频服务
  • ASO优化手机游戏的秘密功能