本文主要是介绍删除有序数组的重复项-------题解报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题解:
个人的想法比较粗糙,因为是递增数组,所以如果有相同的数组,必然相邻,所以只需要判断相邻元素是否相等,相等则将数组从相等处整体前移,同时让r--,当i>=r-1时,就说判断结束的时刻。
写完之后看了大佬的题解,发现用双指针,这题会更简单。
首先让指针p都处在数组开头,q在p前面,然后让q++,再判断nums[p]和nums[q]是否相等,
如果相等,q 后移 1 位 如果不相等,将 q 位置的元素复制到 p+1 位置上,p 后移一位,q 后移 1 位 重复上述过程,直到 q 等于数组长度。
返回 p + 1,即为新数组长度。
代码:
本人
public int removeDuplicates(int[] nums) {int l=0,r=nums.length;for(int i=0;i+1<nums.length;i++){if(nums[i]==nums[i+1]){int k=nums[i];for(int j=i+1;j+1< nums.length;j++){nums[j]=nums[j+1];}nums[nums.length-1]=k;if(i>r-1||i==r-1){
// System.out.println(i);break;}i--;l++;r--;
// System.out.println(l+" "+r+" "+i);
// for(int p=0;p< nums.length;p++)
// System.out.print(nums[p]+" ");
// System.out.println();}}return nums.length-l;}
大佬
public int removeDuplicates(int[] nums) {if(nums == null || nums.length == 0) return 0;int p = 0;int q = 1;while(q < nums.length){if(nums[p] != nums[q]){nums[p + 1] = nums[q];p++;}q++;}return p + 1;
}作者:Max
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solutions/34033/shuang-zhi-zhen-shan-chu-zhong-fu-xiang-dai-you-hu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这篇关于删除有序数组的重复项-------题解报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!