专业网站设计团队,做的网站怎么发网上,做手机网站用什么软件,沈阳哪个医院人流好一点数组去除重复项的算法#xff1a; Ⅰ、删除排序数组中的重复项(注意#xff1a;是已经排好序的)#xff1a;1、题目描述#xff1a;2、解题思路#xff1a;3、实现代码#xff1a; Ⅳ、小结#xff1a; Ⅰ、删除排序数组中的重复项(注意#xff1a;是已经排好序的) Ⅰ、删除排序数组中的重复项(注意是已经排好序的)1、题目描述2、解题思路3、实现代码 Ⅳ、小结 Ⅰ、删除排序数组中的重复项(注意是已经排好序的)
1、题目描述 给定⼀个排序数组你需要在 原地 删除重复出现的元素使得每个元素只出现⼀次返回移除 后数组的新⻓度; 不要使⽤额外的数组空间你必须在 原地 修改输⼊数组 并在使⽤ O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums [1,1,2], 函数应该返回新的⻓度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新⻓度后⾯的元素。 示例 2: 给定 nums [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的⻓度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 你不需要考虑数组中超出新⻓度后⾯的元素。 2、解题思路 使⽤快慢指针来记录遍历的坐标(我认为这是 C 的思想) A、开始时这两个指针都指向第⼀个数字 B、如果两个指针指的数字相同则快指针向前⾛⼀步 C、如果不同则两个指针都向前⾛⼀步 D、当快指针⾛完整个数组后慢指针当前的坐标加 1 就是数组中不同数字的个数 实际上这就是双指针中的快慢指针。在这⾥快指针是读指针 慢指针是写指针。从读写指针考 虑 我觉得更符合本质。 注意要点 A、这道题如果不要求O(n) 的时间复杂度 O(1) 的空间复杂度的话会很简单。 但是这道题是要求的这种题的思路⼀般都是采⽤双指针。 B、如果是数据是⽆序的就不可以⽤这种⽅式了从这⾥也可以看出排序在算法中的基础性 和重要性。 C、注意 nums 为空时的边界条件。 3、实现代码
方式一、符合解题思路的代码与截图
A、代码为 // 去重函数
var removeDuplicates function (nums) {const size nums.length;if (size 0) return 0;let slowP 0;for (let fastP 0; fastP size; fastP) {if (nums[fastP] ! nums[slowP]) {slowP;nums[slowP] nums[fastP];}}return slowP 1;
};// 发现此时的输出结果为5(且此时的数组情况也是想要的结果看方式二)
removeDuplicates([1,1,2,3,4,4,4,5])
B、截图为
方式二、将非重复数组的长度及数组值输出的代码与截图
A、代码为 // 去重函数
var removeDuplicates function (nums) {const size nums.length;if (size 0) return 0;let slowP 0;for (let fastP 0; fastP size; fastP) {if (nums[fastP] ! nums[slowP]) {slowP;nums[slowP] nums[fastP];}}slowP// 下面注释的着两种操作都可以仅将想要的 nums 数组非重复的数据全展示出来(均已实践证实);// nums.splice(slowP)// nums nums.splice(0,slowP)return {slowP, nums};
};// 此时的输出结果为{slowP: 5,nums: [1,2,3,4,5,4,4,5]}
removeDuplicates([1,1,2,3,4,4,4,5])// 当然倒序也是没有问题的(已实践证实);
// removeDuplicates([9,9,8,8,7,7,7,6,2,1])// 但无序有问题(即只支持排序数组);
// removeDuplicates([1,5,11,5,7,1,8,9,9,9,9,])
执行 removeDuplicates([1,1,2,3,4,4,4,5]) 函数后代码执行的过程nums[fastP]值 fastP值 nums[slowP]值 slowP值1 0 1 01 1 2 2 2 13 3 3 24 4 4 34 5 4 6 5 7 5 4
// 此时 fastP 及 slowP 的值对应的 nums 的值就是最终的数组值;
B、截图为 方式三、可能存在的问题
A、代码为 // 去重函数
var removeDuplicates function (nums) {const size nums.length;if (size 0) return 0;let slowP 0;// 此时若是这里 fastP size 修改为 fastP size输出的 slowP 值没问题但 nums 数组有问题;for (let fastP 0; fastP size; fastP) {if (nums[fastP] ! nums[slowP]) {slowP;nums[slowP] nums[fastP];}}return {slowP, nums};
};removeDuplicates([1,1,2,3,4,4,4,5])
// 问题剖析
执行 removeDuplicates([1,1,2,3,4,4,4,5]) 函数后代码执行的过程nums[fastP]值 fastP值 nums[slowP]值 slowP值1 0 1 01 1 2 2 2 13 3 3 24 4 4 34 5 4 6 5 7 5 4 undefined 8 undefined 5Ⅳ、小结
其一、哪里有不对或不合适的地方还请大佬们多多指点和交流 其二、若有转发或引用本文章内容请注明本博客地址(直接点击下面 url 跳转) https://blog.csdn.net/weixin_43405300,创作不易且行且珍惜 其三、有兴趣的话可以多多关注这个专栏(Vue(Vue2Vue3)面试必备专栏)(直接点击下面 url 跳转)https://blog.csdn.net/weixin_43405300/category_11525646.html?spm1001.2014.3001.5482