我在一次采访中被问到,我最近似乎从未排序的数组中删除了重复项,同时仍然保持了它们出现的顺序。
例如:
int[] nums = [2,1,3,3,2,1,4]
int[] result = [2,1,3,4]
我尝试了两个选项,一个用于Hashset,另一个用于list。但是我仍然想知道是否有更好的优化解决方案。 谢谢你能帮帮我 NerdyHB
这是解决方法
public static void main(String[] args) {
int[] nums = new int[] { 2, 1, 3, 2, 1 };
List<Integer> result = removeDuplicates(nums);
System.out.println(result);
int[] res = removeDuplicatesUsingHashSet(nums);
System.out.println(Arrays.toString(res));
}
public static List<Integer> removeDuplicates(int[] nums) {
List<Integer> result = new ArrayList<>();
for (int n : nums) {
if (!result.contains(n)) {
result.add(n);
}
}
return result;
}
public static int[] removeDuplicatesUsingHashSet(int[] nums) {
HashSet<Integer> hset = new HashSet<>();
for (int n : nums) {
hset.add(n);
}
int[] result = new int[hset.size()];
int counter = 0;
Iterator<Integer> itr = hset.iterator();
while (itr.hasNext()) {
result[counter++] = itr.next();
}
return result;
}
答案 0 :(得分:0)
更改行:
HashSet<Integer> hset = new HashSet<>();
收件人:
LinkedHashSet<Integer> hset = new LinkedHashSet<>();
答案 1 :(得分:0)
import java.util.Arrays;
public class Main
{
public static void main (String[]args)
{
int[] arr = { 25, 14, 56, 15, 36, 36, 77, 18, 18, 49 };
int size=arr.length;
for(int i=0;i<size;i++)
{
for(int j=i+1;j<size;j++)
{
if(arr[i]==arr[j])
{
arr[j]=arr[size-1];
size--;
}
}
}
for(int a=0;a<size;a++)
{
System.out.print(arr[a]+" ");
}
}
}