1.首先会想到对数组进行排序和遍历,在排序后,若一个数与它相邻前后数都不同,那就把它踢出来,放进新数列中
int []nums={4,4,2,2,1,3,7,8}; Arrays.sort(nums);//从小到大排序
nums[i]!=nums[i+1]&&nums[i]!=nums[i-1]//判断语句
import java.util.ArrayList;
import java.util.Arrays;
public class test1 {
public static void main(String[] args) {
int []nums={4,4,2,2,1,3,7,8};
Arrays.sort(nums);
ArrayList arrayList=new ArrayList<>();
if(nums[0]!=nums[1]){
arrayList.add(nums[0]);
}
if(nums[nums.length-1]!=nums[nums.length-2]){
arrayList.add(nums[nums.length-1]);
}
System.out.println(Arrays.toString(nums));
for (int i = 1; i < nums.length-1; i++) {
if(nums[i]!=nums[i+1]&&nums[i]!=nums[i-1]){
arrayList.add(nums[i]);
}
}
System.out.println(arrayList);
}
}
2.再要求时间空间复杂度的情况下,利用位运算是最优解,但只能找出唯一单次数,若在数组中有其他单次数,还要继续进行位运算,结果出错
位运算:相同为0,0与x相或为x
public class test1 {
public static void main(String[] args) {
int[]nums={4,5,2,5,3,3,2};
int t=0;
for (int i = 0; i < nums.length; i++) {
t^=nums[i];
}
System.out.println(t);
}
}