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

devtools/2025/3/1 16:45:00/

文章目录

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

题目解析

在这里插入图片描述
题目链接: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/devtools/163677.html

相关文章

面试之《react hooks在源码中是怎么实现的?》

要深入理解 React Hooks 在源码中的实现&#xff0c;可以从以下几个关键方面来剖析&#xff1a; 核心数据结构 在 React 内部&#xff0c;使用链表来管理每个函数组件的 Hooks。每个 Hook 对应一个节点&#xff0c;这些节点通过 next 指针相连。以下是简化后的 Hook 节点结构…

《A++ 敏捷开发》- 17 持续集成

为了避免客户验收前或使用后才暴露大量棘手缺陷&#xff0c;可能要花很长时间才能发现并解决&#xff0c;便应依据精益和系统工程的原则&#xff0c;把系统拆分成子系统/模块&#xff0c;先开发并测试子系统/模块、集成、再测试&#xff0c;按部就班地完成整个软件开发。 验收…

Java中常见的设计模式

设计模式是软件设计中针对常见问题的可复用解决方案&#xff0c;它们提供了代码组织和架构的最佳实践&#xff0c;Java中常见的设计模式可分为创建型、结构型和行为型三类。下面就给大家介绍一些常用的设计模式和案例。 创建型模式&#xff1a;管理对象创建 1.单例模式 确保…

笔记二:整数和浮点数在内存中存储

目录 一、数据类型介绍 二、类型的基本归类 1.整形家族&#xff1a; 2.浮点数家族&#xff1a; 3.构造类型&#xff1a; 4.指针类型 5.空类型&#xff1a; 三、整形在内存中的存储 3.1 原码&#xff0c;反码、补码 3.2 大小端介绍 四、浮点数在内存中的存储 ​编辑 4.…

C++二叉搜索树查找,插入,删除

二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;是一种二叉树&#xff0c;每个节点包含一个键值&#xff0c;并且具有以下特性&#xff1a; 左子树的所有节点的键值都小于当前节点的键值。右子树的所有节点的键值都大于当前节点的键值。每个节点的左右子树都是二叉…

【详细讲解在STM32的UART通信中使用DMA机制】

详细讲解在STM32的UART通信中使用DMA机制 目录 详细讲解在STM32的UART通信中使用DMA机制一、DMA机制概述二、DMA在UART中的作用三、DMA的配置步骤四、UART初始化与DMA结合五、DMA传输的中断处理六、DMA与中断的结合使用七、注意事项与常见问题八、代码示例九、总结 一、DMA机制…

基于 kotlin版本的 Android的MVI架构

从双向绑定到单向数据流 何为MVI&#xff1f; MVI即Model-View-Intent&#xff0c;它受Cycle.js前端框架的启发&#xff0c;提倡一种单向数据流的设计思想&#xff0c;非常适合数据驱动型的UI展示项目&#xff1a; Model: 与其他MVVM中的Model不同的是&#xff0c;MVI的Model…

013作用域

一、基本概念 C语言中&#xff0c;标识符都有一定的可见范围&#xff0c;这些可见范围保证了标识符只能在一个有限的区域内使用&#xff0c;这个可见范围&#xff0c;被称为作用域&#xff08;scope&#xff09;。 软件开发中&#xff0c;尽量缩小标识符的作用域是一项基本原…