首页 > 其他分享 >哈哈哈!力扣80题击败100%

哈哈哈!力扣80题击败100%

时间:2024-10-19 20:49:19浏览次数:3  
标签:26 初始值 重复 100% 元素 力扣 80 赋值 指针

实在没想到能击败100%,忍不住嘚瑟一下:

这道题是leetcode第26题的姐妹篇,也是删除有序数组中的重复元素,但是重复元素需要保留两个。增加的这个小小要求可是不容易搞。

按照第26题的思路,不外乎双指针,设置一个起始指针(简称后指针)作为参照元素的索引号,以另外一个指针(简称前指针)控制循环体,把整个数组遍历一遍。官方解答是把前后指针初始值设置为一样,我则设置前指针的起始值靠后一位,后指针从0开始,前指针从1开始,这样前后指针的概念会更加清晰。如果前指针所指元素与后指针指向的元素不同,则把前指针所指元素赋值给后指针所指的下一个元素,起始时其实就是自己给自己赋值,到后面就会错开。赋值操作完成之后把后指针向后移动一格,然后继续前指针的循环。这里要说明一下,所谓有序数组就是说相同的元素只会挨着出现,我最开始理解成有序数组就是各个元素都有自己的位置,不能随便打乱但是同一个元素可以出现在各个位置,这样想了好几天也没有想到怎么办,直到大量搜索研究之后才知道我相差了。

以上是26题的解法,但是80题要求重复元素保留两个,这就很麻烦了,原来的代码里重复元素出现时没有任何动作,就是继续循环,现在要求保留两个就不能只循环了。于是想到增加一个变量k记录重复元素出现的次数,第二次出现时移动后指针继续循环,这样问题就来了,如果一个元素出现了四五次,那么这个k就很大了,这个元素重复结束之后进入下一个元素时这个k怎么把它回到起始值?思索良久终于解决。

代码如下:

如上图所示,k给定初始值1,也就是说每个元素至少会有一个,如果遇到重复的,这个k就加1,如果k=2也就是重复元素已经有两个了,此时按说不需要执行多余动作,只要把后指针移动一格就行了,但是这样在返回值处理上就会有大问题,返回值是修改后元素的长度,最后的几个元素重复和不重复这个长度就会不一样,于是干脆也执行一次赋值操作。在然后如果重复元素继续出现,则不进行其他动作,只是把k值继续增大,如此就到了前面所说的问题,那个k如何变回初始值,截图中可以看到我把k值的还原放在了再次出现不重复元素的地方,那么再下一次出现重复元素时就可以继续从起始值也就是1开始递增。

在我看来这几个问题的处理还是很值得记录一下的,上面击败100%并不能说明我多厉害,我不过是一个菜鸟,大咖们哪有时间刷这些无聊题目,只是看到这个结果对于我来说表示我在进步,比昨天又走远了一些,所以很高兴,如此而已。感谢看过本文章的所有人!

标签:26,初始值,重复,100%,元素,力扣,80,赋值,指针
From: https://blog.csdn.net/2401_87460766/article/details/143076288

相关文章

  • Leecode热题100-101.对称二叉树
    给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围 [1,1000] 内-100<=Node.val<=100进阶:你可以运用递归和迭代两种方法解决这个问......
  • 720和1080p区别
    720和1080p内容和尺寸大小没有区别,只是在像素上面有区别。720p的分辨率低于1080p的分辨率。1080P是指分辨率达到1920X1080,720p是指分辨率为1280X720。720P又叫半高清,或者叫标准高清,是高清的最低标准,只有达到了720P这个标准才能叫高清视频。一、720和1080p区别720和1080p内容......
  • LeetCode热题100|买卖股票的最佳时机(贪心)
    简述题意省流版:在一个序列里找到max(a[i]-a[k])且i>k。解题思路:  遍历这个序列,i表示当前遍历到了第i个元素,min1表示1到i这个范围内最小的元素,max1表示1到i这个范围内最大的【max(a[i]-a[k])】。max1=max(max1,第i个元素的值-min1)代码如下:classSolution{public:intm......
  • 力扣608.树节点练习
    力扣608.树节点一、题目总结如果你代码出错,可能是以下问题1、notin使用出现问题:notin后面接select子查询的结果中不能出现空值,需要像我这样whereidnotin(selectifnull(p_id,‘ad’)asidfromTreetr2),使用ifnull将空值转化为其他值,才能正常进行判断,但是如......
  • 137,[复杂递归+时间日期]SQL训练之,力扣,1384. 按年度列出销售总额
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,原题力扣链接二,题干三,建表语句四,分析五,SQL解答六,验证七,知识点总结一,原题力扣链接.-力扣(LeetCode)二,题干Product 表:+---------------+---------+|ColumnName|Type|+------------......
  • P1004 [NOIP2000 提高组] 方格取数
    要走两次因此,考虑一个四维的数组来实现,然后如果i=k&&j==l的话记得减一次即得到答案。点击查看代码#include<iostream>#include<stack>#include<cmath>#include<algorithm>#include<set>#include<vector>#include<climits>#include<string.h&g......
  • XL6019芯龙180KHz 60V 5A开关电流升压/升降压型DC-DC转换器
    描述XL6019是一款专为升压、升降压设计的单片集成电路,可工作在DC5V到40V输入电压范围,低纹波,内置功率MOS。XL6019内置固定频率振荡器与频率补偿电路,简化了电路设计。PWM控制环路可以调节占空比从0~90%之间线性变化。内置过电流保护功能与EN脚逻辑电平关......
  • UOJ 80:二分图最大权匹配 ← KM算法
    【KM算法简介】Kuhn-Munkres算法,简称KM算法,是用于“二分图带权最大匹配问题”的经典算法。【题目来源】https://uoj.ac/problem/80【题目描述】从前一个和谐的班级,有nl个是男生,有nr个是女生。编号分别为1,……,nl和1,……,nr。有若干个这样的条件:第v个男生......
  • 一个球从80m高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共
    一、思路解析每次落地后返回原高度的一半上——下,保持米数下——上,减半以此类推二、代码#定义ball=80米ball=80#定义反弹了多少米的参数zo_m=0#进入10次反弹foriinrange(1,11,1):zo_m+=ball#统计上反弹了多少米ball=(ball/2)......
  • 【leetcode】 码住—两种办法解决力扣数学思想 “加一” 操作
     前言......