NC338. 删除升序数组的重复元素(一)
描述
int[] rightNums = [...]; // 长度正确的答案 int m = reArrangeArray(nums); // 调用 assert m == rightNums.length; for (int i = 0; i < m; i++) { assert nums[i] == rightNums[i]; }
示例1
输入:
[1,2,3,4]
输出:
4 [1,2,3,4]
示例2
输入:
[1,3,3,4,4,5]
输出:
4 [1,3,4,5]
说明:
删除后的数组是 [1,3,4,5]C++ 解法, 执行用时: 39ms, 内存消耗: 4704KB, 提交时间: 2022-06-03
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int reArrangeArray(vector<int>& nums) { // write code here int n=nums.size(); if(n==0) return 0; vector<int> temp; int data=-1; for(int i=0;i<n;i++) { if(nums[i]!=data) temp.push_back(nums[i]); data=nums[i]; } int res=temp.size(); nums.resize(res); nums=vector<int>{temp.begin(),temp.end()}; return res; } };
C++ 解法, 执行用时: 40ms, 内存消耗: 4344KB, 提交时间: 2022-04-14
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int reArrangeArray(vector<int>& nums) { // write code here int n = nums.size(); for (int i=1; i<n; ++i) { if (nums[i-1] == nums[i]) { nums[i-1] = 0; } } int index1 = 0, index2 = 0; while (index2 < n) { while (index1 < n && nums[index1] != 0) { ++index1; } index2 = index1; while (index2 < n && nums[index2] == 0) { ++index2; } if (index2 < n) { swap(nums[index1], nums[index2]); ++index1; ++index2; } } nums.resize(index1); return nums.size(); } };
C 解法, 执行用时: 41ms, 内存消耗: 4576KB, 提交时间: 2022-04-07
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型 * * C语言声明定义全局变量请加上static,防止重复定义 */ int reArrangeArray(int* nums, int numsLen ) { // write code here int i = 0, j = 1; for(;j < numsLen; j++){ if(nums[i] != nums[j]) nums[++i] = nums[j]; } return i+1; }
C++ 解法, 执行用时: 41ms, 内存消耗: 4748KB, 提交时间: 2022-08-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int reArrangeArray(vector<int>& nums) { // write code here int n=nums.size(); if(n==0) return 0; vector<int> temp; int data=-1; for(int i=0;i<n;i++) { if(nums[i]!=data) temp.push_back(nums[i]); data=nums[i]; } int res=temp.size(); nums.resize(res); nums=vector<int>{temp.begin(),temp.end()}; return res; } };
C++ 解法, 执行用时: 41ms, 内存消耗: 4792KB, 提交时间: 2022-06-25
class Solution { public: int reArrangeArray(vector<int>& nums) { int h = nums.size(); if (h == 0) return 0; vector<int> v; int a = -1; for (int i = 0; i < h; i++) { if (nums[i] != a) v.push_back(nums[i]); a = nums[i]; } int z = v.size(); nums.resize(z); nums = vector<int> {v.begin(), v.end()}; return z; } };