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;
    }
  • 相关阅读:
    wget(转)
    852. Peak Index in a Mountain Array
    617. Merge Two Binary Trees
    814. Binary Tree Pruning
    657. Judge Route Circle
    861. Score After Flipping Matrix
    832. Flipping an Image
    461. Hamming Distance
    654. Maximum Binary Tree
    804. Unique Morse Code Words
  • 原文地址:https://www.cnblogs.com/zy666/p/10504306.html
Copyright © 2011-2022 走看看