给定一个升序排列的的长度为 n 的数组 nums,请你删除一部分这个数组的重复元素(数组元素需要原地改变),让这个数组的中每个数字都严格大于前一个数(第一个数除外),然后返回删除过后该数组的长度。
假设你返回长度是 m。如果 m 是正确答案,修改后的数组 nums 有 m 或 m 个以上个元素,并且前 m 个元素符合要求,那么你的代码将被判为正确。
数据范围:数组的长度满足 ,数组中的数满足
[1,2,3,4]
4
数组前一部分与原数组相同。
[1,3,3,4,4,5]
4
重排后的数组是 [1,3,4,5,3,4] ,第一部分的长度是 4
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int reArrangeArray (int[] nums) { int len = nums.length; if(len <= 1) return len; int left = 0, right = 0; while(right < len) { if(nums[left] != nums[right]) { nums[++left] = nums[right]; } right++; } return left + 1; } }
class Solution { public: int reArrangeArray(vector<int>& nums) { if (nums.size() == 1) { return 1; } int last = 0; for (int i = 1; i < nums.size(); i++) { if (nums[i] > nums[last]) { swap(nums[i], nums[last + 1]); last++; } } return last + 1; } };
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型 */ int reArrangeArray(int* nums, int numsLen ) { // write code here int i=0; int j=0; int temp; while(j<numsLen){ if(nums[i]==nums[j]){ j++; } else{ temp=nums[i+1]; nums[i+1]=nums[j]; nums[j]=temp; i++; j++; } } return i+1; }
int reArrangeArray(vector<int>& nums) { // write code here if(nums.size()<=1)return nums.size(); int slow=0,fast=1; while(fast<nums.size()){ if(nums[slow]==nums[fast]) nums.erase(nums.begin()+fast); else{ slow++; fast=slow+1; } } return nums.size(); }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int reArrangeArray (int[] nums) { // write code here if(nums==null||nums.length==1){ return nums.length; } int i=0,j=1; while(j<nums.length){ if(nums[i]==nums[j]){ j++; }else{ i++; nums[i]=nums[j]; j++; } } return i+1; } }