【蓝桥杯】每天一题,理解逻辑(1/90)【Leetcode 移动零】

news/2025/2/27 15:37:29/

文章目录

  • 题目解析
  • 讲解算法原理
    • 【双指针算法思路】
    • (数组下标充当指针)
    • 如何划分和执行
    • 过程大致
  • 代码详情

题目解析

在这里插入图片描述
题目链接:https://leetcode.cn/problems/move-zeroes/description/

  1. 题目意思解析
  • 把所有的零移动到数组的末尾
  • 保持非零元素的相对顺序
    理解了这两层的含义,这道题也就完成一半了。

讲解算法原理

解题思路:
题目归类数组划分:将一个数组划分成若干个区间
在这里插入图片描述

解题方法:

【双指针算法思路】

(数组下标充当指针)

在这里插入图片描述

定义两个指针:dest,cur。

  • cur:从左往右扫描数组
  • dest:已处理区间内,非零元素的最后一个一个位置
    作用:两个指针可以划分成三个区间
  • (0,dest) :非0区间
  • (dest+1,cur-1):0区间
  • (cur,n-1):待处理区间

如何划分和执行

  • cur初始化0,dest初始化-1

  • cur从左向右遍历,遇到0元素不做处理,遇到非0元素时,让dest+1,然后非零元素与dest所指元素进行交换(将非零元素直接归类到【0,dest】)
    ![[Pasted image 20250225103906.png]]

  • cur遍历到n-1时,结束

过程大致

![[Pasted image 20250225104208.png]]

联想思想:快排

  • cur指针先行遍历寻找非零元素
    • 零元素:不做处理,往后遍历
    • 非零元素:让dest++,然后dest所指向元素和cur元素进行交换
  • 当cur遍历到数组末尾时候,结束。

代码详情

  • C
`void swap(int*nums,int a,int b)
{int tmp=0;tmp=nums[a];nums[a]=nums[b];nums[b]=tmp;
}
void moveZeroes(int* nums, int numsSize) {int n=numsSize;int dest=-1;for(int cur=0;cur<numsSize;cur++){if(nums[cur]){swap(nums,dest+1,cur);dest++;}}}`
  • C++
`class Solution {
public:void moveZeroes(vector<int>& nums) {for(int cur=0,dest=-1;cur<nums.size();cur++){if(nums[cur]){swap(nums[++dest],nums[cur]);}}}
}

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

相关文章

Oracle中补全时间的处理

在实际数据处理的过程中&#xff0c;存在日期不连续的问题&#xff0c;可能会导致数据传到前后端出现异常&#xff0c;为了避免这种问题&#xff0c;通常会从数据端进行日期不全的处理&#xff1a; 以下为补全年份的案例&#xff1a; with x as (select 开始年份 &#xff08;…

数字可调控开关电源设计(论文+源码)

1 设计要求 在本次数字可调控开关电源设计过程中&#xff0c;对关键参数设定如下&#xff1a; &#xff08;1&#xff09;输入电压&#xff1a;DC24-26V,输出电压&#xff1a;12-24&#xff08;可调&#xff09;&#xff1b; &#xff08;2&#xff09;输出电压误差&#xf…

开源机器学习框架

TensorFlow 是由谷歌开发的一个开源机器学习框架&#xff0c;用于构建和训练深度学习模型。它的核心概念是张量&#xff08;Tensor&#xff09;&#xff0c;即多维数组&#xff0c;用于表示数据。TensorFlow 中的计算以数据流图的形式表示&#xff0c;图中的节点表示各种数学操…

【蓝桥杯集训·每日一题2025】 AcWing 5437. 拐杖糖盛宴 python

5437. 拐杖糖盛宴 Week 2 2月25日 题目描述 农夫约翰的奶牛们非常爱吃甜食&#xff0c;尤其爱吃拐杖糖。 约翰一共有 N N N 头奶牛&#xff0c;编号 1 ∼ N 1 \sim N 1∼N&#xff0c;其中第 i i i 头奶牛的初始高度为 a i a_i ai​。 约翰给奶牛们准备了 M M M 根拐杖…

Linux | GRUB / bootloader 详解

注&#xff1a;本文为 “Linux | GRUB / bootloader” 相关文章合辑。 英文引文&#xff0c;机翻未校。 图片清晰度限于引文原状。 未整理去重。 What is Grub in Linux? What is it Used for? Linux 中的 Grub 是什么&#xff1f;它的用途是什么&#xff1f; Abhishek …

LangChain:Models、Prompts、Indexes、Memory、Chains、Agents。MaxKB

LangChain:Models、Prompts、Indexes、Memory、Chains、Agents 在LangChain框架中,Models、Prompts、Indexes、Memory、Chains、Agents是六大核心抽象概念,它们各自承担独特功能,相互协作以助力开发者基于大语言模型构建高效智能应用。 Models(模型):指代各类大语言模型…

1.1部署es:9200

安装es&#xff1a;root用户&#xff1a; 1.布署java环境 - 所有节点 wget https://d6.injdk.cn/oraclejdk/8/jdk-8u341-linux-x64.rpm yum localinstall jdk-8u341-linux-x64.rpm -y java -version 2.下载安装elasticsearch - 所有节点 wget ftp://10.3.148.254/Note/Elk/…

【算法系列】有趣的计数排序

文章目录 计数排序&#xff08;Counting Sort&#xff09;详解一、基本思想1. 基本原理2. 适用场景3. 稳定性 二、实现步骤1. 统计频率2. 累积频率3. 构建输出数组4. 复制回原数组 三、代码实现四、时间复杂度分析五、空间复杂度分析六、计数排序的优缺点七、总结 计数排序&…