删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
- 更改数组
nums,使nums的前k个元素包含唯一元素,并按照它们最初在nums中出现的顺序排列。nums的其余元素与nums的大小不重要。 - 返回
k。
说实话这题我是一点不会,一开始只想着要删掉重复的,但是我连怎么去判断数组中的项是相同的都不知道,于是只能去看题解然后用deepseek去了解每一步由来,作用,用法。
其中我最想说的就是if nums[fast] = nums[fast-1]这一步,虽然学的时候讲过列表但是用做这样的判断确实是觉得很神奇,这一步通过nums[]的方式直接读取nums中某一位置对应的数,然后通过fast与fast-1来比较前后项是否重复(也因此只能在有序数组中使用)也是让我了解到列表顺序的替换原理与全新的用法,最后附上我的解题代码
移除元素
给你一个数组 nums **和一个值 val,你需要 原地 移除所有数值等于 val **的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
- 更改
nums数组,使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。 - 返回
k。
这一题是我唯一不看解析纯凭自己做出来的(虽然总共就做了四五题而已),其实我一开始的思路是用for循环直接从nums中删除val的,但发现不对才记起来一边对nums for循环;一边对nums删除元素会直接导致nums中的元素位置发生改变导致会有漏删的情况,因此我采用一个空列表temp去存储要有多少个元素被删除,然后另外在用一个for循环来循环temp再去对nums进行移除元素。
总结:以上就是今日份解题历程,虽然解的时候一直报错挺想死,但学会这些用法时还是蛮有成就感的,特别是靠自己解出来那题,感觉整个人都升华了。