首页 > 4.11 网易互娱服务端笔试 AC(3.16/4)

4.11 网易互娱服务端笔试 AC(3.16/4)

第一题 模拟题

这个题就是个模拟题没啥好说的,但是写模拟容易写复杂了,所以,写模拟前一定要想好怎么写,要不然,浪费大量时间不说,代码根本没法改

/**
 * @Author: Shang Huaipeng
 */
import java.util.*;
public class Solution {
    public static void main(String[] args) {
        String add = new Solution().add("25","15.123");
        System.out.println(add);
    }
    public String add (String num1, String num2) {
        // write code here
        String[] s1 = num1.split("\\.");
        String[] s2 = num2.split("\\.");

        StringBuilder xiaoshu = new StringBuilder();
        int last=0;
        if(s1.length==1&&s2.length==1){
        }
        else if(s1.length==1){
            xiaoshu.append(new StringBuilder(s2[1]).reverse().toString());
        }
        else if(s2.length==1){
            xiaoshu.append(new StringBuilder(s1[1]).reverse().toString());
        }
        else{

            for(int i=Math.max(s1[1].length(),s2[1].length())-1;i>=0;i--){
                int a1=(i<s1[1].length())?s1[1].charAt(i)-'0':0;
                int a2=(i<s2[1].length())?s2[1].charAt(i)-'0':0;
                xiaoshu.append((char)((a1+a2+last)%9+'0'));
                last=(a1+a2+last)/9;
            }
        }
        String zheng1 = new StringBuilder(s1[0]).reverse().toString();
        String zheng2 = new StringBuilder(s2[0]).reverse().toString();
        StringBuilder zheng = new StringBuilder();

        for(int i=0;i<Math.max(zheng1.length(),zheng2.length());i++){
            int a1=(i<zheng1.length())?zheng1.charAt(i)-'0':0;
            int a2=(i<zheng2.length())?zheng2.charAt(i)-'0':0;
            zheng.append((char)((a1+a2+last)%9+'0'));
            last=(a1+a2+last)/9;
        }
        if(last!=0){
            zheng.append((char)(last+'0'));
        }
        return zheng.reverse().toString()+(xiaoshu.length()>0?"."+xiaoshu.reverse().toString():"");
    }
}

第二题

算是一个简单的排列组合吧,先将两个数组排序
答案初始为1
在遍历W数组,找到每个工人能够做的任务数
如果任务数小于当前工人的编号,那么说明这个人没法工作,答案为0,
任务数大于等于工人的编号,答案就乘上(任务数-工人前面的人数)(排列组合)

/**
 * @Author: Shang Huaipeng
 * @Date: 2020/4/11 19:01
 * @Version 1.0
 */

import java.io.BufferedInputStream;
import java.util.*;


public class Main {

    /*
    6
1 6 3 4 5 2
2 3 1 4 6 5
10
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        int n = sc.nextInt();
        int w[] = new int[n];
        int t[] = new int[n];
        int m = 0;
        for (int i = 0; i < n; i++) {
            w[i] = sc.nextInt();
        }
        for (int i = 0; i < n; i++) {
            t[i] = sc.nextInt();
        }
        m = sc.nextInt();
        Arrays.sort(w);
        Arrays.sort(t);
        int ans = 0;
        int i = 0;

        LinkedList<Integer> list = new LinkedList<>();
        while (i < n) {
            int index = lower(t, 0, n, w[i]+1) - 1;
            if (index < i) {
                ans = -1;
                break;
            }
            list.add(index + 1);
            i++;
        }
        int tmp = 1;
        int jian = 0;
        for (Integer integer : list) {
            //System.out.println(integer-jian);
            tmp = (tmp * (integer - jian)) % m;
            jian++;
        }
        ans = (ans + tmp) % m;

        //System.out.println(ans);
        if (ans == -1) ans = 0;
        System.out.println(ans);
    }

    static int lower(int nums[], int l, int r, int num) {
        while (l < r) {
            int mid = (l + r) / 2;
            if (nums[mid] >= num) r = mid;
            else l = mid + 1;
        }
        return l;
    }
}

第四题

dp思想

import java.util.*;


public class Solution {

    /*
     *
     * @param boxes int整型二维数组
     * @return int整型
     */
    public int maxBoxes (int[][] boxes) {
        // write code here

        Arrays.sort(boxes,(o1,o2)->{
            if(o1[0]!=o2[0])return o1[0]-o2[0];
            if(o1[1]!=o2[1])return o1[1]-o2[1];
            return o1[2]-o2[2];
        });
        int dp[]=new int[boxes.length];
        Arrays.fill(dp,1);
        for(int i=1;i<boxes.length;i++){
            int max=0;
            for(int j=0;j<i;j++){
                if(boxes[i][0]>boxes[j][0]&&boxes[i][1]>boxes[j][1]&&boxes[i][2]>boxes[j][2])max=Math.max(dp[j],max);
            }
            dp[i]+=max;
        }
        int ans=0;
        for(int i=0;i<boxes.length;i++){
            ans=Math.max(ans,dp[i]);
        }
        return ans;
    }
}

全部评论

(1) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐