lintcode算法題之521-去除重複元素

給一個整數數組,去除重複的元素。

你應該做這些事

1.在原數組上操作
2.將去除重複之後的元素放在數組的開頭
3.返回去除重複元素之後的元素個數

樣例

例1:

輸入:
nums = [1,3,1,4,4,2]
輸出:
[1,3,4,2,?,?]
4

解釋:
1. 將重複的整數移動到 nums 的尾部 => nums = [1,3,4,2,?,?].
2. 返回 nums 中唯一整數的數量  => 4.
事實上我們並不關心你把什麼放在了 ? 處, 只關心沒有重複整數的部分.

代碼區:

public class Solution {
    /**

     *username:softstarhhy
     * @param nums: an array of integers
     * @return: the number of unique integers
     */
     

     public int Calnum(int[] a,int flag)
   {int nums=0;
    for(int i=0;i<a.length;i++)
    {
        
      if(a[i]==flag) 
     { nums++;
     }
      else
      {
          
      }
    }
    return nums;
   }
   public int CalMaxnum(int[] nums)
   {
       int flag=0;
       for(int i=0;i<nums.length;i++)
       {
           flag=flag+nums[i];
       }
       return flag;
   }
    public int deduplication(int[] nums) {
        // write your code here
       /* QuickSort(int start,int end,nums);*/
       //找一個和數組都不能相當的數字
       int i=0;
      int flag=CalMaxnum(nums);
       if(flag==0&&nums.length!=0)
       return 1;
       //將出現重複的數字置爲flag
       if(nums.length==1||nums.length==0)
       return nums.length;
       int j=0;
       int k;
      
       for(j=0;j<nums.length;)
       {
        if(nums[j]!=flag)
       {
        for( k=j+1;k<nums.length;)
        {
            if(nums[j]!=nums[k])
            {
              k=k+1;
            }
            else
            {
                nums[k]=flag;
            }
        }
        j++;
       }
       else if(nums[j]==flag)
       {
           if(j<nums.length-1)
           {
               j=j+1;
               k=j+1;
           }else if(j==nums.length-1)
           {
             j=j+1;  
             k=j;
           }
           else
           {
               i=0;
               k=nums.length-1;
           }
       }
       
     }

     //雙指針法將flag值進行交換
     for(int m=0,n=m+1;m<nums.length-1&&n<nums.length;)
     {
         if(nums[m]!=flag&&nums[n]!=flag)
         {
            
                m++;
                n++;
            
         }
         else if(nums[m]!=flag&&nums[n]==flag)
         {
             m++;
                n++;
         }
         else if(nums[m]==flag&&nums[n]!=flag)
         {
             int mid=nums[n];
             nums[n]=flag;
             nums[m]=mid;
             m++;
             n=n+1;
         }
         else if(nums[m]==flag&&nums[n]==flag)
         {
             n++;
         }
        
     }
   int d=Calnum(nums,flag);
   
return nums.length-d;
        
        
    }
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章