京东笔试:100%,27%
第一题合唱团身高分组,第二个用例给的很有迷惑性,我看了很久才发现69079936 236011312 77957850 653604087 443890802 277126428 755625552 768751840 993860213 882053548
这个用例,69079936 236011312 77957850排序后是 69079936 77957850 236011312 ,236011312 是9位数。。。。。
然后就可以AC了:
import java.util.*; /** * @author :week * @date :Created in 2019-08-24 18:48 * @description: * @modified By: * @version: 1.0.0 */ public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] H=new int[N]; int[] tmp=new int[N]; for(int i=0;i<N;i++){ H[i]=sc.nextInt(); tmp[i]=H[i]; } Arrays.sort(tmp); Map<Integer,Integer> map =new HashMap<Integer,Integer>(); int count=0; for(int i=0;i<N;i++){ int a=H[i]; int b=tmp[i]; if(map.containsKey(a)){ map.put(a,map.get(a)+1); }else{ map.put(a,1); } if(map.containsKey(b)){ map.put(b,map.get(b)-1); }else{ map.put(b,-1); } if(map.containsKey(a)&&map.get(a)==0){ map.remove(a); } if(map.containsKey(b)&&map.get(b)==0){ map.remove(b); } if(map.size()==0){ count++; } } System.out.println(count); } }第二题:不知道字典序怎么贪。。来回倒腾,永远27%。。
import java.util.*; /** * @author :week * @date :Created in 2019-08-24 18:49 * @description: * @modified By: * @version: 1.0.0 */ public class Main { private static boolean[][] grah; private static int[] boycount; private static int[] grilcount; private static int n; private static int m; public static void main(String[] args) { Scanner sc=new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); grah=new boolean[n][n]; boycount =new int[n]; grilcount=new int[n]; for(int i=0;i<m;i++){ int x=sc.nextInt(); int y=sc.nextInt(); int min=Math.min(x,y); int max=Math.max(x,y); x=min-1; y=max-n-1; boycount[x]++; grilcount[y]++; grah[x][y]=grah[y][x]=true; } int[] L=findMax(boycount); int[] R=findMax(grilcount); int count=0; List<Integer> res=new ArrayList<Integer>(); while(true){ if(L[0]==-1&&R[0]==-1){ break; } count++; if(L[1]>=R[1]){ deleteNode(L[0],true); res.add(L[0]+1); }else{ deleteNode(R[0],false); res.add(R[0]+1+n); } L=findMax(boycount); R=findMax(grilcount); } System.out.println(count); Collections.sort(res, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { int t1=o1; int t2=o2; while(t1>10){ t1=t1/10; } while(t2>10){ t2=t2/10; } return t1-t2; } }); for(int i=0;i<res.size();i++){ System.out.println(res.get(i)); } } public static void deleteNode(int index,boolean tag){ if(tag){ boycount[index]=0; for(int i=0;i<n;i++){ if(grah[index][i]){ grah[index][i]=false; grilcount[i]--; } } }else{ grilcount[index]=0; for(int i=0;i<n;i++){ if(grah[i][index]){ grah[i][index]=false; boycount[i]--; } } } } public static int[] findMax(int[] num){ int max=0; int index=-1; for(int i=0;i<num.length;i++){ if(num[i]>max){ max=num[i]; index=i; } } return new int[]{index,max}; } }