NC394. 删除升序数组的重复元素(二)
描述
int[] rightNums = [...]; // 长度正确的答案 int m = removenums(nums); // 调用 assert m == rightNums.length; for (int i = 0; i < m; i++) { assert nums[i] == rightNums[i]; }
示例1
输入:
[1,1,2,2,3]
输出:
5 [1,1,2,2,3]
说明:
不用删除示例2
输入:
[1,1,1,2,2,2,3,3]
输出:
6 [1,1,2,2,3,3]
说明:
删除第三个 1 和第三个 2 即可。C 解法, 执行用时: 28ms, 内存消耗: 3016KB, 提交时间: 2022-04-29
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型 * * C语言声明定义全局变量请加上static,防止重复定义 * * C语言声明定义全局变量请加上static,防止重复定义 */ int removenums(int* nums, int numsLen ) { // write code here int slow = 1; for(int fast = 2; fast < numsLen; fast++) { //若快指针位置的元素不等于慢指针的元素 if(nums[fast] != nums[slow]|| nums[slow - 1] != nums[fast]) { //慢指针+1,即将快指针挪到原慢指针指向的下一位 nums[++slow] = nums[fast]; } } //最后慢指针的大小+1就是新的数组的大小 return slow+1; }
C++ 解法, 执行用时: 31ms, 内存消耗: 3136KB, 提交时间: 2022-03-23
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int removenums(vector<int>& nums) { // write code here int n = nums.size(); if (n <= 2) { return n; } int slow = 2, fast = 2; while (fast < n) { if (nums[slow - 2] != nums[fast]) { nums[slow] = nums[fast]; ++slow; } ++fast; } return slow; } };
C++ 解法, 执行用时: 31ms, 内存消耗: 3140KB, 提交时间: 2022-06-10
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int removenums(vector<int>& nums) { // write code here int num=1; int first=0,second=0; for(;second<nums.size();second++){ if(second>=1&&nums[second]==nums[second-1]) num++; else num=1; if(num<3){ nums[first++]=nums[second]; } /* if(nums[second]==nums[second-1]){ num++; }else{ if(num<3){ while(num){ nums[first++]=nums[second-num]; num--; } } num=1; }*/ } /* if(num<=3){ while(num){ nums[first++]=nums[second-num]; num--; } }*/ nums.resize(first); return nums.size(); } };
C++ 解法, 执行用时: 31ms, 内存消耗: 3220KB, 提交时间: 2022-05-07
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int removenums(vector<int>& nums) {//下标从零开始的数组 // write code here int n= nums.size(); if(n <=2 ) return n; int fast=2, slow=2; while( fast < n ) { if(nums[slow-2] != nums[fast]) { nums[slow]=nums[fast]; slow++; } fast++; } return slow; } };
C 解法, 执行用时: 32ms, 内存消耗: 3024KB, 提交时间: 2022-03-29
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型 * * C语言声明定义全局变量请加上static,防止重复定义 */ int removenums(int* nums, int numsLen ) { // write code here int hash[100001] = {0}; int index = 0; for (int i = 0; i < numsLen; i++) { hash[nums[i]]++; if (hash[nums[i]] <= 2) { nums[index++] = nums[i]; } } return index; }