• RemoveDuplicatesFromSortedArrayI II,移除有序数组里的重复元素以及移除数组里的某个元素


    RemoveDuplicatesFromSortedArrayI:

    问题描述:给定一个有序数组,去掉其中重复的元素。并返回新数组的长度。不能使用新的空间。

    [1,1,2,3] -> [1,2,3] 3

    算法思路:用一个数字记录新数组的最后一个元素的位置

     1 public class RemoveDuplicatesFromSortedArray {
     2     
     3     public int removeDuplicates(int[] nums)
     4     {
     5         if(nums.length == 0)
     6         {
     7             return 0;
     8         }
     9         int key = nums[0];
    10         int count = 0;//记录新数组最后一个元素的位置,即新数组长度
    11         for(int i = 0; i < nums.length; i ++)
    12         {
    13             if(nums[i]!=key)
    14             {
    15                 nums[count++] = key;
    16                 key = nums[i];
    17             }
    18         }
    19         nums[count++] = key;
    20         return count;
    21     }
    22 }

     与之类似的就是移除数组里某个元素。

     1 public int removeElement(int[] nums, int val) {
     2         if(nums.length == 0)
     3         {
     4             return 0;
     5         }
     6         int count = 0;
     7         for(int i = 0; i < nums.length; i ++)
     8         {
     9             if(nums[i]!=val)
    10             {
    11                 nums[count++] = nums[i];
    12             }
    13         }
    14         return count;
    15     }

     RemoveDuplicatesFromSortedArrayII:

    问题描述:可以重复一次。

    For example,
    Given sorted array nums = [1,1,1,2,2,3],

    Your function should return length = 5, with the first five elements of nums being 1122 and 3. It doesn't matter what you leave beyond the new length.

    算法分析:这种题目,要巧妙利用数组的下标,和上一题解法相似,只不过,循环里的判断条件变了。

    //[1,1,1,2,2,3] -> [1,1,2,2,3] 5 允许重复一次
    public class RemoveDuplicatesfromSortedArrayII 
    {
    	public int removeDuplicates(int[] nums) 
    	{
    		if(nums.length == 0 || nums.length == 1)
    		{
    			return nums.length;
    		}
    		int count = 1, temp = nums[1];
    		for(int i = 2; i < nums.length; i ++)
    		{
    			if(nums[i] != nums[i - 2])
    			{
    				nums[count++] = temp;
    				temp = nums[i];
    			}
    		}
    		nums[count++] = temp;
    		return count;
        }
    }
    
  • 相关阅读:
    autofac meta
    RazorEngine 3.6.5.0
    pfx 转 snk
    git
    Nlog Layout
    NLog 传递参数
    扫描.net dll引用dll
    vbox android x86 分辨率
    Andriod x86 4,4
    .net cli 源码
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5549545.html
Copyright © 2020-2023  润新知