每日一题——移动零

简介: 每日一题——移动零

移动零

题目链接


思路——双指针

如果可以开辟额外的空间,那这题十分好做。我们开辟和nums同样大小的空间,将遍历数组,将非零元素从头放置,将零从后往前放置,这样就可以将所有的零放到后面,同时保证非零元素的相对顺序。

如图,对于数组[1,0,0,4,1,2,0]

但是这一题要求我们不能额外开辟空间,即要求我们的空间复杂度为O(1),那我们就要思考用双指针的方法了。

  • 我们定义指针left用来指向已经处理好的序列末尾,指针right指向还未处理好的序列开头
  • right向后开始遍历数组,当right指向非零元素时,就交换leftright指向的元素,同时left右移
  • 最终就可以得到答案

如图:

实现代码

//由于形参的改变不影响实参,因此要实现真正的交换要传地址
void Swap(int *num1, int *num2) {
    int temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}
void moveZeroes(int *nums, int numsSize) {
    int left = 0, right = 0;
    while (right < numsSize) {
        //right指向非零元素就交换right和left的数据,同时left右移
        if (nums[right] != 0)
        {
            Swap(nums + left, nums + right);
            left++;
        }
        //right向右遍历数组
        right++;
    }
}
相关文章
|
JavaScript 算法 前端开发
JS垃圾回收机制的原理
JS垃圾回收机制的原理
150 0
|
存储 编译器 C语言
C语言实现栈和队列【数据结构/初阶】
C语言实现栈和队列【数据结构/初阶】
271 0
|
JSON 小程序 应用服务中间件
微信的接口wxLogin()的返回值都有什么?
【10月更文挑战第4天】微信的接口wxLogin()的返回值都有什么?
1138 1
|
NoSQL Ubuntu Redis
百度搜索:蓝易云【ubuntu安装rediscli教程】
现在,你已经成功在Ubuntu上安装了Redis CLI。可以通过在终端中运行 `redis-cli`命令来启动Redis CLI,并与Redis服务器进行交互。
264 0
|
前端开发
css清除浮动的方法
今天写页面突然用到要清除浮动的样式,然后就想不去起来了(尴尬)
780 154
|
存储 前端开发 JavaScript
Vuex 难题困扰无数开发者,掌握这些秘诀,让你在前端热潮中轻松突围!
【8月更文挑战第27天】Vuex 是 Vue.js 的一种状态管理模式,它支持集中式存储及状态管理。使用过程中,开发者常遇问题包括:状态更新不一致、异步操作困难以及模块组织不当等。为确保状态更新的一致性,应利用 mutations 进行状态更改。对于异步操作,推荐使用 actions 处理以避免状态变更追踪难题。此外,合理划分模块并采用清晰命名有助于提升大型项目的可维护性。
143 0
Python中的深复制与浅复制:正确处理可变对象
在Python编程中,复制对象是一种常见的操作,而深复制和浅复制是两种不同的复制方式,尤其在处理可变对象时,选择正确的复制方式至关重要。本文将深入讨论深复制和浅复制的概念,并提供一些正确处理可变对象的实用技巧。
|
搜索推荐
打造个性化代码高亮组件
打造个性化代码高亮组件
130 0
|
传感器 存储 数据采集
如何选择工程监测便携振弦手持采集仪
1.功能需求:根据实际需求选择采集仪的功能,比如测量数据精度、采集频率、传感器接口等。一般来说,能够实现高精度数据采集和多种传感器接口的采集仪更加适合进行工程监测。
如何选择工程监测便携振弦手持采集仪
|
存储 人工智能 Cloud Native
经济下行基建托底,偶数湖仓一体打造坚实新基建数字底座
经济下行基建托底,偶数湖仓一体打造坚实新基建数字底座
4832 0
经济下行基建托底,偶数湖仓一体打造坚实新基建数字底座