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;
    }
  • 相关阅读:
    数据库触发器
    Java第四周学习日记(绪)
    Java第四周学习日记
    Java第三周学习日记
    java第二周学习日记
    Java第一周总结(20160801-20160807)
    ubuntu上解压目录里的文件到指定文件夹
    ubuntu上安装ftp
    ubuntu上u-boot的编译
    Ubuntu上Xilinx ARM交叉编译器安装
  • 原文地址:https://www.cnblogs.com/zy666/p/10504306.html
Copyright © 2011-2022 走看看