8.31度小满&茄子&广联达笔试总结
一度小满和茄子冲突了,还有个能延后到九点的广联达。两台电脑一起答。
度小满的三道编程题
p1:数组及连续子数组中最大值/最小值为k的子数组总数。题目看错了没注意连续,后来看到大佬的双循环才知道这个。没写出来。
p2:题目忘了,好像是什么二维数组(希望好心人能告知一下QAQ)没回溯出来 //路过大佬告知是类似机器人走格子
p3:DNA ...不会。
茄子:一道编程题,lc原题64.最小路径和
广联达:
p1:暴力,用了个哈希表记录下标,两个循环找有无逆序的。过了
import java.lang.reflect.Array; import java.util.*; public class p1 { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); int n=sc.nextInt(); int []sent=new int[n]; int []rec=new int[n]; int cnt=0; HashMap<Integer,Integer>map=new HashMap<>(); for (int i = 0; i < n; i++) { sent[i]=sc.nextInt(); map.put(sent[i],i ); } for (int i = 0; i < n; i++) { rec[i]=sc.nextInt(); } if(n==0||n==1) System.out.println(0); for (int i = 0; i < n; i++) { for (int j = i; j <n ; j++) { if( map.get(rec[i])>map.get(rec[j])) { cnt++; break; } } } System.out.println(cnt); } }p2:n个座位,m条规定 n和l之间最多坐x个人。问整辆车最多做几个人。
无从下手,感觉很像做过的某个动归题,想不起来。
以上没做出来的都在看大佬们的解答。
-----------------------------------
9.1更新
广联达第二题,有大佬说像剪视频,有人说可以参考合并区区间。于是我去合并区间(lc56题),做了。然后照葫芦画瓢写了如下代码。跑了一下,目前的问题是,如果有个区间不让坐人(最大乘坐人x=0)而这个区间与其他重合,应该怎么处理。希望有大佬能指点指点。
import java.lang.reflect.Array; import java.util.*; public class p2 { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[][] arr = new int[m][3]; for (int i = 0; i < m; i++) { arr[i][0] = sc.nextInt(); arr[i][1] = sc.nextInt(); arr[i][2] = sc.nextInt(); } Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if(o1[0]==o2[0]){ return o1[1]-o2[1]; } return o1[0]-o2[0]; } }); int maxseat=0; int i=0; List<int[]> res=new ArrayList<>(); while (i<arr.length){ int l=arr[i][0]; int r=arr[i][1]; int x=arr[i][2]; while (i<arr.length-1&&arr[i+1][0]<=r){ if(arr[i][2]==0&&arr[i+1][2]>r-arr[i+1][1]){ maxseat=Math.max(arr[i+1][2]-(r-arr[i+1][1]),maxseat); } else { maxseat=Math.max(arr[i][2],arr[i+1][2]); } i++; } i++; } System.out.println(maxseat); } }
等我把晚上四场笔试做了来再来填坑。
#笔试#