输入包含两行,第一行一个整数n,代表数组arr的长度,第二行n个整数,代表数组arr,arr[i]为32位整数。
输出出现奇数次的两个数,按照从小到大的顺序。
4 1 1 2 3
2 3
6 11 22 11 23 23 45
22 45
时间复杂度,额外空间复杂度。
import java.util.Scanner; import java.util.Arrays; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] arr=new int[n]; for(int i=0;i<n;i++){ arr[i]=sc.nextInt(); } Arrays.sort(arr); for(int i=0;i<n-1;){ if(arr[i]!=arr[i+1]){ System.out.print(arr[i]+" "); break; } i=i+2; } for(int i=n-1;i>1;){ if(arr[i]!=arr[i-1]){ System.out.print(arr[i]); break; } i=i-2; } } }
import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()){ int n = in.nextInt(); int[]num = new int[n]; int[]num1 = new int[2]; Map<Integer,Integer> map = new HashMap<>(); for (int i = 0; i < n ; i++) { num[i] = in.nextInt(); } for (int j = 0; j < n ; j++) { if(map.containsKey(num[j])){ map.put(num[j],map.get(num[j])+1); }else { map.put(num[j],1); } } int k =0; for (Integer key:map.keySet()) { if(map.get(key)%2!=0){ num1[k] = key; k++; } } Arrays.sort(num1); String a =""; a =num1[0]+" "+num1[1]; System.out.println(a); } } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int array[] = new int[n]; for(int i = 0; i<n; i++){ array[i] = sc.nextInt(); } int ret = 0; for(int x:array){ ret^=x; } int i = 0; for(;i<32;i++){ if((ret&(1<<i))==1) break; } int a = 0; int b = 0; for(int x:array){ if((x&(1<<i))==1){ a^=x; }else{ b^=x; } } if(a<b){ System.out.println(a+" "+b); }else{ System.out.println(b+" "+a); } } }
import java.util.*; public class Main2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } int retExclusive = 0; for (int i = 0; i <n ; i++) { retExclusive^=arr[i]; } int index = findIndex(retExclusive); int num1 = 0; int num2 = 0; for (int i = 0; i <n ; i++) { if (judgeIndex(arr[i],index)){ num1^=arr[i]; }else{ num2^=arr[i]; } } if (num1<num2){ System.out.println(num1+" "+num2); }else{ System.out.println(num2+ " " + num1); } } } public static int findIndex(int num){ //在整数num中找到最右边是1的位置 int index = 0; while ((num&1)==0){ num>>=1; index++; } return index; } public static boolean judgeIndex(int num,int index){ //判断整数num右边第num位是否为1 num>>=index; return ((num&1)==1); } }
import java.util.Scanner; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.Map.Entry; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ //这块不是很懂,使用nextInt接收个数时,还未输入具体数字 nextLine后面的代码也会执行 String s=sc.nextLine(); String s1=sc.nextLine(); String[] ss=s1.split(" "); Map<String,Integer> mm=new HashMap<String,Integer>(); for(int i=0;i<ss.length;i++){ //偶数最终将不在map中 if(mm.containsKey(ss[i])){ mm.remove(ss[i]); }else{ mm.put(ss[i],1); } } Set<Entry<String,Integer>> es=mm.entrySet(); int [] arr=new int[2]; for(Map.Entry<String,Integer> en:es){ if(arr[0]==0){ arr[0]=Integer.parseInt(en.getKey()); }else{ arr[1]=Integer.parseInt(en.getKey()); } } if(arr[0]>arr[1]){ arr[0]=arr[0]^arr[1]; arr[1]=arr[0]^arr[1]; arr[0]=arr[0]^arr[1]; } System.out.println(arr[0]+" "+arr[1]); } } }