力扣26-2023.4.3

发布时间 2023-04-03 23:15:35作者: PamShao

力扣26-2023.4.3

问题

26. 删除有序数组中的重复项

image-20230403212930019

image-20230403212946345

方法

  • 思路:

遍历数组,若后一个和前一个相同,则继续下一个;若后一个与前一个不同,则直接赋值。

  • C++程序:
#include <iostream>
#include <vector>
using namespace std;

int removeDuplicates(vector<int>& nums) {
    /*
    思路:遍历数组,若后一个和前一个相同,则继续下一个;若后一个与前一个不同,则直接赋值。
    */
	if (nums.size() < 2) 
        return nums.size();    //长度为1
	int j = 0;
	for (int i = 1; i < nums.size(); i++)
		if (nums[j] != nums[i]) 
            nums[++j] = nums[i];
	return ++j;
}

int main()
{
    int m[10] = {0,0,1,1,1,2,2,3,3,4}; // 输入数组
    vector<int> nums(m,m+10);
    
    int k = removeDuplicates(nums); // 调用
    cout << "k="<<k<<endl;

    for(int i=0;i<k;i++)
    {
        cout << nums[i]<<endl;
    }
    return 0;
}
  • C程序:
#include <stdio.h>

int removeDuplicates(int* nums, int numsSize){
    if(nums==NULL)
        return 0;   //为空
    int i,j=1;
    for(i=1;i<numsSize;i++){
        if(nums[i]==nums[i-1])
            continue;   //若后一个和前一个相同,则跳过
        nums[j++] = nums[i];    //若不同,则赋值
    }
    return j;
}
int main()
{
    int m[10] = {0,0,1,1,1,2,2,3,3,4}; // 输入数组
    
    int k = removeDuplicates(m,10); // 调用
    printf("k=%d\n",k);

    for(int i=0;i<k;i++)
    {
        printf("%d\n",m[i]);
    }
    return 0;
}
  • 扩展:

数组中元素比较