-
题目:一个有序数组nums,原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度
-
不能使用额外的数组空间,必须原地修改输入数组并在使用o(1)额外空间的条件下完成
-
例如:输入:【0,1,2,2,3,3,4】
-
输出:5
-
使用双指针算法
-
public static int removeList(int[] nums) { if(nums.length == 0){ return 0; } int i = 0; for(int j = 1;j<nums.length;j++) { if(nums[j] != nums[i]){ i++; nums[i] = nums[j] } } return i + 1; }
-
此方法只适用于有序数组返回删除重复元素后的数组的长度,但原数组的数组长度不变。
-
适用一个指针i作为头指针,指针j开始对数组进行遍历,如果i后边没有数值与其相同,则让i加一,j继续遍历.
-
若要输出删除后的数组,可以定义一个空数组进行存放i下标之前的所有下标的元素
-
下面是c语言代码,打印删除后的数组长度
-
#include <stdio.h> int main(int argc, char const *argv[]) { int arr[11] = {0,1,2,2,3,3,4,4,4,4,4}; int i = 0; int j; for(j = 0;j < 11;j++) { if(arr[j] != arr[i]) { i += 1; arr[i] = arr[j]; } } printf("%d\n", i+1); return 0; }
-
返回删除后的数组,若原数组长度需更改,记得更改循环次数
-
#include <stdio.h> int main(int argc, char const *argv[]) { int arr[11] = {0,1,2,2,3,3,4,4,4,4,4}; int ara[10] = {0}; int i = 0; int j; for(j = 0;j < 11;j++) { if(arr[j] != arr[i]) { i += 1; arr[i] = arr[j]; } } i += 1; for(j = 0;j<i;j++) { ara[j] = arr[j]; printf("%d", ara[j]); } return 0; }
删除排序数组中的重复项
最新推荐文章于 2025-02-11 23:38:43 发布