LeetCode.283移动零(双指针)

news/2024/11/24 11:56:53/

LeetCode.283移动零

  • 1.问题描述
  • 2.解题思路
  • 3.代码

1.问题描述

给定一个数组 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

2.解题思路

双指针

  • 设置两个指针指向开头元素。一个fast指针,一个slow指针
  • fast指针向右移动,如果元素为0,不执行操作,向右移动,如果元素不为0,将fast指针所指元素,移到slow指针所在的位置,slow指针向右移动一位
  • 当fast指针向右移动出界之后,将当前slow指针指向元素及其之后元素设置为0

3.代码

python:双指针

from typing import Listclass Solution:def moveZeroes(self, nums: List[int]) -> None:# 设置一个变量,用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上# 一开始默认在索引为 0 的位置slow = 0# 从头到尾遍历数组# 遍历完毕之后,slow 指向了一个为 0 的元素,或者如果数组中不存在 0 ,就和 fast 一样,超过了数组的范围for fast in range(len(nums)):# 在遍历过程中,如果发现访问的元素是非 0 元素# 说明 slow 不在正确的位置上,需要向后移动,寻找合适的位置if nums[fast] != 0:# 这个时候,原先 slow 的值需要被 fast 的值覆盖nums[slow] = nums[fast]# slow 需要向后移动,寻找合适的位置slow += 1# 接下来,只需要把 slow 极其后面所有的元素都设置为 0 就行for i in range(slow, len(nums)):# 都设置为 0nums[i] = 0return numssolution = Solution()
res = solution.moveZeroes([0, 1, 2, 0, 3])
print(res)

C++:双指针

class Solution {
public:void moveZeroes(vector<int>& nums) {// 设置一个变量,用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上// 一开始默认在索引为 0 的位置int slow = 0;for (int fast = 0; fast < nums.size(); fast++) {// 在遍历过程中,如果发现访问的元素是非 0 元素// 说明 slow 不在正确的位置上,需要向后移动,寻找合适的位置if (nums[fast] != 0) {// 这个时候,原先 slow 的值需要被 fast 的值覆盖nums[slow] = nums[fast];// slow 需要向后移动,寻找合适的位置slow++;}}// 接下来,只需要把 slow 极其后面所有的元素都设置为 0 就行for (int i = slow; i < nums.size(); i++) {// 都设置为 0 nums[i] = 0;}}
};

http://www.ppmy.cn/news/1238307.html

相关文章

安装compiler version 5

这个compiler version5 在我的资源里面可以免费下载&#xff1b; 另外这个东西还需要安装&#xff0c;安装教程在这里&#xff1a;Keil最新版保姆教程&#xff08;解决缺少V5编译器问题&#xff09; - 哔哩哔哩 (bilibili.com) 看吧安装好了year

中伟视界:AI分析盒子——ai算法中通过什么方法做到一个对象只报警一次,为每个对象生成一个唯一ID

在AI算法中&#xff0c;通过特定的方法实现对象只报警一次&#xff0c;为每个对象生成唯一ID是非常重要的技术问题。随着人工智能技术的快速发展&#xff0c;AI算法在各个领域得到了广泛应用&#xff0c;如安防监控、智能交通、自动驾驶等。而在这些应用场景中&#xff0c;需要…

二、sql手工注入

一、SQL注入的本质 解释&#xff1a;想要进行sql注入&#xff0c;肯定要发现注入点&#xff0c;一般简单的sql注入通过下面两种方式判断就能发现是否存在sql注入漏洞 1.字符型 注意&#xff1a;字符型注入可能为或" 查询语句&#xff1a; select * from student where…

03.实现

实现 条款26&#xff1a;尽可能延后变量定义式的出现时间 条款27&#xff1a;尽量少做转型动作 条款28&#xff1a;避免返回handles指向对象内部成分 在C中&#xff0c;handles是指一个指向对象的指针或引用&#xff0c;用于访问该对象的成员函数或成员变量。 而条款28所说…

笔记:内网渗透流程之信息收集

信息收集 首先&#xff0c;收集目标内网的信息&#xff0c;包括子网结构、域名信息、IP地址范围、开放的端口和服务等。这包括通过主动扫描和渗透测试工具收集信息&#xff0c;以及利用公开的信息源进行信息搜集。 本机信息收集 查看系统配置信息 查看系统详细信息&#xf…

多模态——使用stable-video-diffusion将图片生成视频

多模态——使用stable-video-diffusion将图片生成视频 0. 内容简介1. 运行环境2. 模型下载3. 代码梳理3.1 修改yaml文件中的svd路径3.2 修改DeepFloyDataFiltering的vit路径3.3 修改open_clip的clip路径3.4 代码总体结构 4. 资源消耗5. 效果预览 0. 内容简介 近期&#xff0c;…

jQuery 第十章(jQuery AJAX以及jQuery和其他框架兼容)

文章目录 前言什么是 AJAX&#xff1f;jQuery - AJAX load() 方法jQuery load() 方法 jQuery - AJAX get() 和 post() 方法HTTP 请求&#xff1a;GET vs. POSTjQuery $.get() 方法jQuery $.post() 方法 jQuery 与其他框架兼容jQuery 和其他 JavaScript 框架jQuery noConflict()…

JWT和Token之间的区别

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…