新手学python,试着解力扣算法题历程(两题)

67 阅读2分钟

删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

说实话这题我是一点不会,一开始只想着要删掉重复的,但是我连怎么去判断数组中的项是相同的都不知道,于是只能去看题解然后用deepseek去了解每一步由来,作用,用法。

其中我最想说的就是if nums[fast] = nums[fast-1]这一步,虽然学的时候讲过列表但是用做这样的判断确实是觉得很神奇,这一步通过nums[]的方式直接读取nums中某一位置对应的数,然后通过fast与fast-1来比较前后项是否重复(也因此只能在有序数组中使用)也是让我了解到列表顺序的替换原理与全新的用法,最后附上我的解题代码

屏幕截图 2025-07-23 182226.png

移除元素

给你一个数组 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进行移除元素。

image.png

总结:以上就是今日份解题历程,虽然解的时候一直报错挺想死,但学会这些用法时还是蛮有成就感的,特别是靠自己解出来那题,感觉整个人都升华了。