給一個整數數組,去除重複的元素。
你應該做這些事
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;
}
}