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

C/C++:优选算法

一、双指针

1.1移动零

链接:283. 移动零 - 力扣(LeetCode) 

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

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

解法:

通过两个指针(并非是真的指针,只是数组的下标),dest和cur将长度为n的数组划分为三个部分;

[0,dest]:cur已经遍历过的地方,处理过不为0的部分;

[dest+1,cur-1]:cur已经遍历过的地方,处理过为0的部分;

[cur,n-1]:cur未遍历的地方;


第一种情况: cur指向数组元素为0

[0,dest]部分是处理过并且元素不为0的部分,cur指向0,所以处理后[0,dest]不变;

[dest+1,cur-1]部分是处理过为0的部分,所以处理后[dest+1,cur-1]长度加一;

[cur,n-1]部分长度减一;

 第二种情况: cur指向数组元素不为0

[0,dest]部分是处理过并且元素不为0的部分,cur指向1,所以处理后[0,dest]长度加一,dest往后移一位,用来存放1;

[dest+1,cur-1]部分是处理过为0的部分,所以处理后[dest+1,cur-1]长度不变;

[cur,n-1]部分长度减一;

 dest往后移一位,dest指向为0的部分,只需要将此时的dest指向和cur指向元素交换即可,之后cur++;


初始状态,dest=-1,cur=0;

1.nums[cur]为0,cur++;

2.nums[cur] 不为0,dest++后,在交换nums[dest]和nums[cur];

c++解法: 

class Solution {
public:void moveZeroes(vector<int>& nums) {for(int dest=-1,cur=0; cur<nums.size(); cur++){if(nums[cur])swap(nums[cur], nums[++dest]);}}
};

c语言解法: 

void moveZeroes(int* nums, int numsSize) 
{for(int dest=-1,cur=0; cur<numsSize; cur++){if(nums[cur]){       int temp = 0;temp = nums[++dest];nums[dest] = nums[cur];nums[cur] = temp;}}
}


http://www.lryc.cn/news/436821.html

相关文章:

  • 用于大数据分析的数据存储格式:Parquet、Avro 和 ORC 的性能和成本影响
  • 【Jupyter Notebook】安装与使用
  • 默认端口被占用后,如何修改Apache2 端口
  • Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)
  • Idea 中的一些配置
  • VulnHub DC-1-DC-7靶机WP
  • 基于DPU的容器冷启动加速解决方案
  • SOME/IP 通信协议详细介绍
  • 基于Boost库的搜索引擎开发实践
  • 【2023年】云计算金砖牛刀小试3
  • 在以太坊中不同合约之间相互调用的场景有哪些?
  • 关于 PC打开“我的电脑”后有一些快捷如腾讯视频、百度网盘、夸克网盘、迅雷等各种捷方式在磁盘驱动器上面统一删除 的解决方法
  • 数据结构——初识数据结构
  • 每日搜索论坛回顾:2024年9月13日
  • 猎板PCB大讲堂:PCB设计铺铜技巧与策略全解析
  • Matplotlib - Statistical Distribution作图
  • 【机器学习】9 ——最大熵模型的直观理解
  • 1.单例模式
  • 数据倾斜问题
  • 大龄焦虑?老码农逆袭之路:拥抱大模型时代,焕发职业生涯新活力!
  • Vue 页面反复刷新常见问题及解决方案
  • Windows上指定盘符-安装WSL虚拟机(机械硬盘)
  • ffmpeg实现视频的合成与分割
  • 团体标准的十大优势
  • java spring boot 动态添加 cron(表达式)任务、动态添加停止单个cron任务
  • sqlgun靶场漏洞挖掘
  • 好用的 Markdown 编辑器组件
  • uniapp vite3 require导入commonJS 的js文件方法
  • 通义灵码用户说:“人工编写测试用例需要数十分钟,通义灵码以毫秒级的速度生成测试代码,且准确率和覆盖率都令人满意”
  • MySQL中的约束