数组_双指针

news/2024/11/24 1:44:26/

今天的目标:

多写几个题目,总结双指针

题目:

q1 lc27

在这里插入图片描述
在这里插入图片描述

解答如下:

class Solution {
public:int removeElement(vector<int>& nums, int val) {int left =0;for(int right = 0; right < nums.size() ; right++){if( nums[right] != val  ){swap(nums[left] , nums[right]);left++;}}return left;}
};

学习到的点:

这个题目还有优化思路:
由于它只想把有用的返回,那碰到val,就把它和nums的最后一个位置交换,然后lenth-1,这样循环的次数可能会减少,对于变动不大的数组效率会大幅提高,挖坑,等把数组全部学完,把这种算法写一下。

q2 lc26

在这里插入图片描述
在这里插入图片描述

解答如下:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int left = 0;int temp = -100000;//随便写一个超过nums[i]范围的数,使nums[0]可以被保存for(int right = 0; right < nums.size() ; right++){if(nums[right] != temp ){nums[left] = nums[right];left++;}temp = nums[right];}return left;}
};

其它学习到的点:

虽然和题目的思路是一样的,但是引入了一个temp的临时变量存储right上一时刻的值。
官方解答用java写得,解答如下:

public int removeDuplicates(int[] nums) {if (nums.length == 0) return 0;int i = 0;for (int j = 1; j < nums.length; j++) {if (nums[j] != nums[i]) {i++;nums[i] = nums[j];}}return i + 1;
}作者:LeetCode
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-xiang-by-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

细看它的解答,没有引入temp的临时值,但是有三个地方做了处理:
一个就是开头,让right 直接等于1;
另一个就是让nums[left]存储上一个值,如果发现了nums[right] != nums[left] ,就先把left往前走一步再存值;
最后一点, 返回值是 i+1, 因为它的i是已经处理完成的位置索引,这个索引+1才是真正的个数,而在我自己写得程序里面,i是即将要处理的位置,这个位置对应的索引值就是处理好的数组个数。

q3 lc80

在这里插入图片描述
在这里插入图片描述

做不出来我佛了,膝盖奉上呜呜呜,在链接里面有大佬的解题图示。大佬写得好简单呜呜呜

class Solution {
public:int removeDuplicates(vector<int>& nums) {int n = nums.size();if(n <= 2){return n;}int sp = 1;for(int fp = 2; fp < n; fp++){if(nums[fp] != nums[sp - 1]){nums[++sp] = nums[fp];}}return sp + 1;}
};作者:dexin
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/solution/c-shuang-zhi-zhen-dan-ci-sao-miao-tu-jie-by-dexin/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上面三个题目分别用双指针,仅删除、留一个或者两个

总结:

1.用双指针 对 一个数组 进行各种操作。


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

相关文章

GORUBER,Fomblin,Y25/6,Y06/6,Y16/6,galden,solvay,YLVAC

GORUBER,Fomblin,Y25/6,Y06/6,Y16/6,galden,solvay,YLVAC GORUBER,戈润勃,氟化油,氟油 真空泵油全氟聚醚 Perfluoropolyethers PFPE Fomblin Galden Y Lubricant Grades PFPE Lubricants LS and HS fluids LS/HS Vapor Phase Soldering Fluids PFPE Testing Electronic Fluids…

VMware安装macOS方法

安装所需包 : https://cloud.189.cn/t/u6faMjUvm2ai (访问码:lc80) 第一步&#xff1a;下载VMware 打开虚拟机包里的VMware文件夹&#xff0c;打开程序名为“VMware-workstation-full-15.0.0-10134415.exe”的程序&#xff0c;下载VMware。到许可证环节&#xff0c;打开程序名…

【日常系列】LeetCode《1·数组常用技巧篇》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(1) 数组元素作为索引下标 优&#xff1a;减少内存占用&#xff08;map&#xff1a;数组&#xff0b;链表&#xff0c;优化哈希冲突cost&#xff09; 注&#xff1a;元素范…

LeetCode笔记

sLeetCode笔记 10-10 LeetCode_9回文数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aobF1ApE-1668064348453)(C:\Users\DELL\Desktop\LeetCode\001.png)] // 方法1&#xff1a;将整数转为字符串,前后指针循环public boolean isPalindrome(int x…

看别人创业的总结

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/52614475 未经博主允许不得转载。 博主地址是&#xff1a;http://blog.csdn.net/freewebsys 1&#xff0c;关于创业 自己也在一家小的创业公司工作。一晃就是2年时间。 对于未来无论是成功还是失败都学…

leetcode双指针系列1: LC26删除有序数组中的重复项,LC674最长连续递增序列,LC27移除元素,LC80 删除有序数组中的重复项II,LC 283 移动零,LC75 颜色分类

双指针思想通常用来解决数组或者字符串的子序列问题&#xff0c; 使用双指针&#xff0c;左指针指向当前已经处理好的序列的尾部&#xff0c;右指针指向待处理序列的头部。 在循环中&#xff0c;判断条件都是右指针所在位置&#xff0c;如果满足&#xff0c;会对右指针位置进行…

R900527918、LC80B10D6X/博世力士乐二通插装阀

标准系列 规格 16 … 160 组件系列 6X, 2X, 7X 最大工作压力 420 bar 最大流量 25000 l/min 特征&#xff1a; 带或不带衰减阻尼的阀架 2 个面积比 6 种不同的开启压力 01 02 03 04 05 06 07 LC / 型号 01 插装阀 LC 规格 02 规格 16 16 规格 25 25 …

【JAVA】仿顺丰淘宝智能识别信息模块——DidYourTypeItCorrectly

文章目录 题目项目层级结构解答已完成的部分简介未完成的部分概述代码部分DidYourTypeCorrectly.javaFormModel.javaIntelligentRecognition.javaMVCWindow.javaPlaint.java 运行结果截图结语 题目 模拟顺风地址智能识别&#xff0c;对用户输入的信息&#xff0c;包括&#xf…