从数组中删除重复项

今天,对曾经的体型进行了琢磨,发现一些新的用法与解法,比如对Java中的一些包,入import   java.util.Set ; import  java.util.HashSet; import  java.util.Iterator; import  java.util.List;  import  java.util.ArrayList;  import  java.util.Arrays;  

import  java.util.map;  import  java.util.HashMap等。偶尔发现这些数据结构,对数组的调用,栈,Hash队列,哈希图,数组 等的使用,和数组中索引与索引位置中的数字的关系,处理的很紧密。

举个例子:从排序数组中删除重复项,在不产生新的数组的条件下。遍历数组,比较前一个与后一个是否数值相同,找到不同的  那个往前放置,知道放完为止,即使该数组所应有的长度。代码如下:

package com.imooc;
public class Solution {
  public int removeDuplicates(int[] nums) {
  int j=1;
  for(int i=1;i<nums.length;i++)
  {
if(nums[i]!=nums[i-1])
{
nums[j]=nums[i];
j++;
}
  }
        return j;
    }
  public static void main(String[]args){
  int []arr=new int[]{1,2,2,3,3,3,100,100};
  Solution solve = new Solution();
  int length = solve.removeDuplicates(arr);
  for(int i=0;i<length;i++)
  {
  System.out.print(arr[i]+" ");
  }
  }

而对于从非排序数组中删除重复项,则用到了HashSet与Set。遍历数组,用set.contains()与set.add()去增加 if 的设置条件,然后将set中的数值读出到原来的数组中,用到 Iterator 去读出 set 队列中的数值,并用Arrays.sort()进行排序,就排序set队列长度下的数值。

package com.imooc;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Arrays;
public class Solution{
public int removeDuplicates(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
int len = 0;
for(int i=0;i<nums.length;i++){
if(set.contains(nums[i])!=true){
set.add(nums[i]);
len++;
}else{
continue;
}
}
Iterator<Integer> it = set.iterator();
int j=0;
while(it.hasNext())
{
nums[j]=it.next();

j++;
}
Arrays.sort(nums,0,j);
for(int i=0;i<j;i++){
System.out.println(nums[i]);
}


return j;
}
public static void main(String[]args){
int []nums = new int[]{2,1,1,2,3,4,5,4,6};
Solution solve = new Solution();
int length = solve.removeDuplicates(nums);

}
}

猜你喜欢

转载自blog.csdn.net/luolvzhou/article/details/79720857