Leetcode力扣刷题经验总结(数据结构、链表、顺序表)(例:删除有序数组中的重复项)

首先要明白leetcode的尿性....力扣题目的数据范围很抽象。然后记住三句话

第一一句话:

题目放在两个数组中分析(利用数组元素拷贝的思想),再把一个数组看成两个数组取解题。

其次:

如:看好给你的数据范围(防止出现漏掉某种最简单的情况!)

最后:

在数组中修改数据的时候,nums0 和 numsnumsSize - 1 即首个元素和最有一位元素需要检验一下,有没有达到题目的数据要求!

删除有序数组中的重复项

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

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

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

数据范围:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104

注意:尿性的来了!nums.length可以为 1 !

因此需要特殊考虑数据的两端范围!!!

题目解析:

我们按照两个数组去分析,可以将第一个数组中没有重复的元素拷贝到第二个数组中!

比如将1 1 2 3 4 5 5 6 7没有重复的元素1 2 3 4 5 6 7拷贝到另一个数组中,达成题目的要求。

然后在一个数组中,完成所有的操作!!!

int removeDuplicates(int* nums, int numsSize) {

int src = 0;

int dest = 0;

if(numsSize == 1) //需要单独考虑只有一个元素的情况

{

return 1;

}

while(src < numsSize - 1)

{

if(numssrc != numssrc + 1)

{

numsdest++ = numssrc++;

}

else

src++;

if(src == numsSize - 1)

numsdest++ = numssrc;

}

return dest; //由于前面的语句numsdest++,所以此时dest就是新数组的长度

}

相关推荐
To_OC3 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
Yang_jie_039 小时前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
海石10 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
Tisfy11 小时前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量
海石11 小时前
1次遍历,空间复杂度击败100%,时间复杂度击败85%
算法·leetcode
lueluelue4711 小时前
LeetCode:滑动窗口
数据结构·算法·leetcode
码少女12 小时前
数据结构——冒泡排序及优化
数据结构·算法·排序算法
青梅橘子皮12 小时前
string---入门OJ题(1)
数据结构·算法
小高Baby@12 小时前
单链表的删操作
数据结构·算法·golang
qq_4542450313 小时前
BasicMethod.Map 设计框架:8 个并行基础模块的数学根基与实现
数据结构·算法·c#