leetcode日常练习day2

发布时间:2026/7/2 3:46:05
leetcode日常练习day2 能够感觉到今天比昨天上手感觉好多了。虽然还是有逻辑不严谨的时候但是逻辑思维的确需要慢慢培养~今日题目一:给你一个非严格递增排列的数组nums请你原地删除重复出现的元素使每个元素只出现一次返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k。去重后返回唯一元素的数量k。nums的前k个元素应包含排序后的唯一数字。下标k - 1之后的剩余元素可以忽略借鉴与昨日的双指针今天还是比较有思路的两个指针先同时指向第一个元素然后右指针先行如果和左边相等右指针向右行如果不相等说明右指针所指的元素是我想要加上的这个元素因此将该元素赋予给左指针的右边位置即left1后再进行赋值然后继续。整体思路是左指针定位置有新的元素加入了它右移1位告诉新元素位置而右指针就是先锋指针找到新元素带它回去~看了一下这一题的官方题解也是用的双指针的方法也是让快指针先行如果快指针和快指针指向前面的元素值不相等即新元素出现给它带到慢指针位置去相等则快指针继续前行继续找。今日题目二给你一个有序数组nums请你原地删除重复出现的元素使得出现次数超过两次的元素只出现两次返回删除后数组的新长度。不要使用额外的数组空间你必须在原地 修改输入数组并在使用 O(1) 额外空间的条件下完成。这个题目跟上面的很相似正好两个可以放在一起做其实拿到手没有思路的地方就是如何让它最多只出现两次我觉得按照我上道题那样的思路的确不是很好解决所以最后看了官方题解我理解的是给出的数组已经按升序排列所以可以将两个元素看成一组比较下一个元素和这一组里的第一个元素如果相等说明不是我需要的继续遍历当遇到不相等的说明是我想加上的那么就在这一组的第二个元素的右边给它加上。就是slow现在指向每一组元素的最后一位fast指针还是先行指针去找新的元素。画图说明今天整体而言比昨天的感受要好很多希望能坚持下去