360笔试 编程题 100 55

第一道 ac 求表面积
按行遍历,找出每块的左右暴露面积(前块高减后块高)
按列遍历,找出每块的前后暴露面积(同上)
上下面积为M*N*2
代码不放了
第二道 数字排列
用一两个M大小数组分别存入两数的值
结果从左到右遍历,每位上都找最大的取模值
取模查找方式:若找模为k的两数字,一个为i,另一即为((k M)- i)%M,通过上面的俩数组很好查找

import java.util.*;

public class Main {
    public static void main(String[] arg){
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int M = in.nextInt();
        int[] a=new int[N];
        int[] b=new int[N];
        int[] ma = new int[M];
        int[] mb = new int[M];

        for(int j=0;j<N;j ){
            a[j] = in.nextInt();
            ma[ a[j] ] ;
        }
        for(int j=0;j<N;j ){
            b[j] = in.nextInt();
            mb[ b[j] ] ;
        }
        int[] re = new int[N];
        int  flag = M-1;
        for(int k=0;k<N;k ){
            flag= fun(ma,mb,M,N,flag);
           re[k] = flag;
        }
        for(int i=0;i<M-1;i ){
            System.out.print(re[i] " ");
        }
        System.out.print(re[M-1]);
     }
     public static int fun(int[] ma,int[] mb,int M,int N,int flag){
        // flag[0] = M-1
        for(int k=flag;k>=0;k--){
            for(int i=0;i<M;i ){
                int s = ((k M)-i)%M;
                if(ma[i]>0 && mb[ s]>0){
                    ma[i]--;mb[s]--;
                    return k;
                }
            }
        }
        return -1;
     }
}
最后一分钟提交,过了55%,有没有大佬有最优方案?
#360公司##笔试题目#
全部评论

相关推荐

一tiao酸菜鱼:秋招还没正式开始呢,就准备有结果了。。。。?
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务