华为4.13软开笔试

#华为笔试#
100分:硬件最佳分配策略
200分:工费调度方案
300分:分糖果
第一题做了一个多小时95%
剩下两题来不及了,第二题0,第三题输出-5%
求第二题第三题答案
下面第一题代码
package exam.huawei;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int m = in.nextInt();
    String ss = in.nextLine();
    int[][] fu = new int[m][5];
    for (int i = 0; i < m; i++) {
      String s = in.nextLine();
      String[] str = s.split(",");
      int[] num = new int[str.length];
      for (int k = 0; k < str.length; k++) {
        num[k] = Integer.parseInt(str[k]);
      }
      fu[i][0] = num[0];
      fu[i][1] = num[1];
      fu[i][2] = num[2];
      fu[i][3] = num[3];
      fu[i][4] = num[4];
    }
    int[] xu = new int[6];
    for (int i = 0; i < 6; i++) {
      xu[i] = in.nextInt();
    }
    int[][] use1 = new int[m][5];
    int j = 0;
    for (int i = 0; i < m; i++) {
      if (fu[i][1] >= xu[2]
          && fu[i][2] >= xu[3]
          && (fu[i][3] == xu[4] || xu[4] == 9)
          && (fu[i][4] == xu[5] || xu[5] == 2)) {
        for (int k = 0; k < 5; k++) {
          use1[j][k] = fu[i][k];
        }
        j++;
      }
    }
    int[][] use = new int[j][5];
    for (int i = 0; i < j; i++) {
      for (int k = 0; k < 5; k++) {
        use[i][k] = use1[i][k];
      }
    }
    if (xu[1] == 1) {
      Arrays.sort(
          use,
              (o1, o2) -> {
                if (o1[1] == o2[1]) {
                  return o1[2] - o2[2];
                }
                return o1[1] - o2[1];
              });
      if (use.length > xu[0]) {
        int[][] use11 = new int[xu[0]][5];
        for (int i = 0; i < xu[0]; i++) {
          for (int k = 0; k < 5; k++) {
            use11[i][k] = use[i][k];
          }
        }
        Arrays.sort(
            use11,
                Comparator.comparingInt(o -> o[0]));
        System.out.print(xu[0]);
        for (int i = 0; i < xu[0]; i++) {
          System.out.print(" " + use11[i][0]);
        }
      } else {
        Arrays.sort(
            use,
                Comparator.comparingInt(o -> o[0]));
        System.out.print(use.length);
        for (int i = 0; i < use.length; i++) {
          System.out.print(" " + use[i][0]);
        }
      }
    } else {
      Arrays.sort(
          use,
              (o1, o2) -> {
                if (o1[2] == o2[2]) {
                  return o1[1] - o2[1];
                }
                return o1[2] - o2[2];
              });
      if (use.length > xu[0]) {
        int[][] use22 = new int[xu[0]][5];
        for (int i = 0; i < xu[0]; i++) {
          for (int k = 0; k < 5; k++) {
            use22[i][k] = use[i][k];
          }
        }
        Arrays.sort(
            use22,
                Comparator.comparingInt(o -> o[0]));
        System.out.print(xu[0]);
        for (int i = 0; i < xu[0]; i++) {
          System.out.print(" " + use22[i][0]);
        }
      } else {
        Arrays.sort(
            use,
                Comparator.comparingInt(o -> o[0]));
        System.out.print(use.length);
        for (int i = 0; i < use.length; i++) {
          System.out.print(" " + use[i][0]);
        }
      }
    }
  }
}


#华为笔试##笔试题目##实习#
全部评论
第三题就是lc题目,等分子集,用01背包动态规划。但lc只要求求输出true&nbs***bsp;false,这道题还得输出具体选择了哪些
2 回复 分享
发布于 2022-04-13 23:31
第二题,仅供参考 #include <bits/stdc++.h> using namespace std; int N; struct num{ int time; int sorce; friend bool  operator < (num a,num b) {      if(a.sorce==b.sorce)      {          return a.time < b.time;      }      return a.sorce > b.sorce; } }; int main() {     scanf("%d",&N);     if(N==0)     {         return 0;     }     vector<num> arr;     for(int i=0;i<N;i++)     {         int t=0,s=0;         scanf("%d%d",&t,&s);         num n;         n.time=t;         n.sorce=s;         arr.push_back(n);     }     sort(arr.begin(),arr.end());     int ans = arr[0].sorce;     int cur_time = 2;     for(int i=1;i<N;i++)     {         if(arr[i].time >= cur_time)         {             ans+= arr[i].sorce;             cur_time++;         }     }     printf("%d",ans);     return 0; }
1 回复 分享
发布于 2022-04-14 10:31
第三题leetcode有类似原题
点赞 回复 分享
发布于 2022-04-17 11:08
我没过,这几次比前面几次难多了
点赞 回复 分享
发布于 2022-04-16 20:31
跟我一样,第三题一顿dfs最后5%,第二题我是看都没看懂
点赞 回复 分享
发布于 2022-04-14 00:28
第三题,0-1背包,这样应该可以
点赞 回复 分享
发布于 2022-04-13 22:05
可以使用本地IDe吗😕那个编译器我敲吐了
点赞 回复 分享
发布于 2022-04-13 21:38

相关推荐

上周组里招人,我面了六个候选人,回来跟同事吃饭的时候聊起一个让我挺感慨的现象。前三个候选人,算法题写得都不错。第一道二分查找,五分钟之内给出解法,边界条件也处理得干净。第二道动态规划,状态转移方程写对了,空间复杂度也优化了一版。我翻他们的简历,力扣刷题量都在300以上。后三个呢,就有点参差不齐了。有的边界条件没处理好,有的直接说这道题没刷过能不能换个思路讲讲。其中有一个女生,我印象特别深——她拿到题之后没有马上写,而是先问我:“面试官,我能先跟你确认一下我对题目的理解吗?”然后她把自己的思路讲了一遍,虽然最后代码写得不是最优解,但整个沟通过程非常顺畅。这个女生的代码不是最优的,但当我问她“如果这里是线上环境,你会怎么设计’的时候,她给我讲了一套完整的方案——异常怎么处理、日志怎么打、怎么平滑发布。她对这是之前在实习的时候踩过的坑。”我在想LeetCode到底在筛选什么?我自己的经历可能有点代表性。我当年校招的时候,也是刷了三百多道题才敢去面试。那时候大家都刷,你不刷就过不了笔试关。后来工作了,前三年基本没再打开过力扣。真正干活的时候,没人让你写反转链表,也没人让你手撕红黑树。更多的是:这个接口为什么慢了、那个服务为什么OOM了、线上数据对不上了得排查一下。所以后来我当面试官,慢慢调整了自己的评判标准。算法题我还会出,但目的变了。我出算法题,不是想看你能不能背出最优解。而是想看你拿到一个陌生问题的时候,是怎么思考的。你会先理清题意吗?你会主动问边界条件吗?你想不出来的时候会怎么办?你写出来的代码,变量命名乱不乱、结构清不清楚?这些才是工作中真正用得到的能力。LeetCode是一个工具,不是目的。它帮你熟悉数据结构和常见算法思路,这没问题。但如果你刷了三百道题,却说不清楚自己的项目解决了什么问题、遇到了什么困难、你是怎么解决的,那这三百道题可能真的白刷了。所以还要不要刷LeetCode?要刷,但别只刷题。刷题的时候,多问自己几个为什么:为什么用这个数据结构?为什么这个解法比那个好?如果换个条件,解法还成立吗?把刷题当成锻炼思维的方式,而不是背答案的任务。毕竟面试官想看到的,从来不是一台背题机器,而是一个能解决问题的人。
国企上岸了的向宇同桌...:最害怕答非所问了,但是频繁反问确定意思又害怕面试官觉得我笨
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
2
35
分享

创作者周榜

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