zoukankan      html  css  js  c++  java
  • 删除一个有序数组中的重复元素

    题目来自leetcode初级算法的数组

    • 方案一

    因为这个数组是有序的,所以删除的时候可以这样做。使用最小数字减去1来标记作为被删除掉的元素。然后再把数组中的有效元素移动位置就可以了。使用C语言实现如下:

    int removeDuplicates(int* nums, int numsSize) {
        int temp = nums[0];
    	int count = 1;
    	int j;
        if(0 == numsSize)                //若没有数组,则返回0
        {
            count = 0;
        }
    	else
        {
            for (int i = 1; i < numsSize; i++)
    	{
    		if (temp == nums[i])
    		{
    			nums[i] = nums[0] - 1;	//标记删除
    		}
    		else
    		{
    			temp = nums[i];
    			count++;                //纪录删除后的元素个数
    		}
    	}
    	for (int i = 1; i < numsSize; i++)
    	{
    		if (nums[0] - 1 == nums[i]) //删除掉的元素
    		{
    			for (j = i + 1; nums[0] - 1 == nums[j] && j < numsSize; j++);//下一个有效元素
    			if (nums[0] - 1 != nums[j] && j < numsSize)
    			{
    				nums[i] = nums[j]; //移动它
    				nums[j] = nums[0] - 1;//删除它
    			}
    		}
    	}
        }
    	return count;
    }

    这样做其实比较麻烦的。我提交了之后看了一下解法,使用的办法比较简单。

    • 方案二

    只去看它后面的元素是否有和它相同,若有相同则把该元素移动到当前位置的下一个位置即可。然后继续向后找看是否有相同的元素。该算法也是简单的,比较易理解的。

    int removeDuplicates(int* nums, int numsSize) {
        int i = 1;
        if(0 == numsSize)
        {
            i = 0;
        }
        else
        {
            for(int j = 1; j < numsSize; j++)
            {
                if(nums[j] != nums[i])
                {
                    i++;
                    nums[i] = nums[j];
                }
            }
        }
        return i;
    }
  • 相关阅读:
    update(十)
    perl-basic-数据类型&引用
    R-barplot()
    leetcode-22-string
    Java-basic-7-面向对象
    Java-basic-6-方法
    Java-basic-4-数据类型
    Java-basic-3-运算符-修饰符-循环
    Java-basic-2-
    leetcode-21-knapsack
  • 原文地址:https://www.cnblogs.com/zy666/p/10504306.html
Copyright © 2011-2022 走看看