网易 8.8 笔试 3.1AC -- java岗

越笔试越感觉自己菜

1.素数个数 AC

大概就是给个数组,每个数字都可以无限拆分,问数组最多能拆出多少个素数

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long ans = 0;
        int n = sc.nextInt();
        for(int i = 0; i < n; i++) ans += sc.nextInt() >> 1;
        System.out.print(ans);
    }
}

2.排列 AC

给定 n,再给了一个排列 T,扩充成排列 S(数字 1 - n 各使用一次)。问最小字典序的S

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        boolean[] vis = new boolean[n + 1];
        Queue<Integer> q = new LinkedList();
        for(int i = 0; i < m; i++){
            int num = sc.nextInt();
            vis[num] = true;
            q.offer(num);
        }
        StringBuilder ans =new StringBuilder();
        for(int i = 1; i <= n; i++) {
            if(vis[i]) continue;
            while(!q.isEmpty() && q.peek() < i) ans.append(q.poll() + " ");
            ans.append(i + " ");
        }
        while(!q.isEmpty()) ans.append(q.poll() + " ");
        System.out.print(ans.toString().substring(0, ans.length() - 1));
    }
}

3. 平分物品 AC

给了 n 个物品和它对应的价值。可以舍弃一部分物品,要两个人平分这些物品(数量可以不一样,价值总和要一样),问最少舍弃多少价值。
n <= 15,所以直接 dfs

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        while(T > 0) {
            T--;
            int n = sc.nextInt();
            int[] a = new int[n];
            for(int i = 0; i < n; i++) a[i] = sc.nextInt();
            //Arrays.sort(a); 这行可以不要,写的时候忘记删去了
            System.out.println(new Solution().value(n, a));
        }
    }
}

class Solution{
    int[] a;
    int n;
    int ans = Integer.MAX_VALUE;
    public int value(int n, int[] a) {
        this.a = a;
        this.n = n;
        dfs(n - 1, 0, 0, 0);
        return ans;
    }

    void dfs(int index, int p1, int p2, int value) {
        if(index == -1) {
            if(p1 == p2 && ans > value) ans = value;
            return;
        }
        dfs(index - 1, p1 + a[index], p2, value);
        dfs(index - 1, p1, p2 + a[index], value);
        dfs(index - 1, p1, p2, value + a[index]);
    }
}

4. 构建生成树 0.1AC

给了 n 个点, m 条边,(u,v,w),从 m 条边中选 n - 1 条边构建生成树,求最大权值 - 最小权值的最小值
用的 dfs,不知道哪里出问题了……有大佬 AC 的请指教一下。

#笔试题目##秋招##Java#
全部评论
小白求问,素数那个是什么原理呀
1 回复
分享
发布于 2020-08-08 23:05
滴滴
校招火热招聘中
官网直投
请问楼主第三天第11行代码,为什么需要排序?我觉得不用吧
点赞 回复
分享
发布于 2020-08-08 16:57
大佬,那个平分物品使用dfs是怎么个思想,我不大懂java的代码
点赞 回复
分享
发布于 2020-08-08 17:29
第二题不是要求字典序吗  如果输入是  10 2 10 2 楼主的代码是 1 3 4 5 6 7 8 9 10 2 不应该是1 10 2 3 4 5 6 7 8 9 吗 牛客有人发题拿了过来
点赞 回复
分享
发布于 2020-08-08 17:43
我也一样,前三题AC,最后一个0.1😪
点赞 回复
分享
发布于 2020-08-08 18:30
import java.util.ArrayList; import java.util.Scanner; public class Main {         public static void main(String[] args) {             Scanner in = new Scanner(System.in);             int n = in.nextInt();             int m = in.nextInt();             ArrayList<Integer> list = new ArrayList<>();             for(int i=0;i<m;i++){                 list.add(in.nextInt());             }             for(int i=0;i<m;i++){                 int temp = list.get(i);                 for(int j=1;j<temp;j++){                     if(!list.contains(j)&&temp>j){                         System.out.print(j+" ");                         list.add(j);                     }                 }                 System.out.print(temp+" ");             }             while(list.size()<n){                 int temp = list.size()+1;                 System.out.print(temp+" ");                 list.add(temp);             }         } } 我这有什么毛病没
点赞 回复
分享
发布于 2020-08-08 18:31
前3题都过了,第二题我用的是归并排序,枚举出剩余的元素,然后和原来的数组按大小归并,第三题想法和楼主一样,用的dfs。 就是第四题不知道怎么做,看看有没有大佬会做教一下。
点赞 回复
分享
发布于 2020-08-08 18:56
求问大佬,为啥第一题要用long呀,我用int只过了30%
点赞 回复
分享
发布于 2020-08-08 23:42
大佬刷了多少题,好强
点赞 回复
分享
发布于 2020-08-09 00:06
巅峰王者挂件已经暴露了楼主那隐藏的身份😯
点赞 回复
分享
发布于 2020-08-09 09:25
请问第三题可以说一下思路吗
点赞 回复
分享
发布于 2020-08-09 12:04
哈哈哈,和我一样最后一题莽了一个最小生成树过了0.1
点赞 回复
分享
发布于 2020-08-09 12:35
3.1AC还感觉自己菜,我留下了不学无术的泪水
点赞 回复
分享
发布于 2020-08-11 11:11

相关推荐

想投递od的小伙伴看过来~&nbsp;需要已经拿到毕业证书~【岗位详情】C++软件开发工程师&nbsp;(od)北京/上海/杭州下方岗位要求仅供参考,我们实际招聘中只要求C/C++,算法,数据结构,操作系统等一些计算机基础知识。此外部门周三周五5.30下班,工作强度整体还算不错。如果有想法的话,欢迎随时沟通。【工作职责】1、负责基础软件中的核心技术﹣自研编译器研发,基于各类架构芯片的编译器开发和优化,进行异构/并行计算系统的设计,实现关键优化算法,以全面的技术栈和系统的思维挖掘芯片极致性能;2、负责CPU、GPU、DSP、MCU等全类型架构的自研编译器设计与开发,结合特定硬件架构和ISA的编译技术研究与使能、性能分析及优化,发挥极致编译优化能力;3、负责异构编程技术,支持高性能计算,HPC、MPI等优化,探索异构编程架构,发挥多样化芯片算例;4、负责编译器在公司各主力场景的落地,产品联合优化,发挥编译优化优势,支撑各产品的性能增强;【岗位要求】1、具有扎实的编码C/C++功底,熟悉常用的数据结构及算法,熟悉LINUX/UNIX环境操作,熟悉汇编,有基础软件相关的开发或性能调优经验,了解体系结构(如x86/arm/mips/risc-v),了解常用编译技术框架GCC/LLVM;2、有异构并行系统运行时设计及开发经验,对异构计算社区状态或高性能技术发展趋势有深入理解;3、具有丰富的编译系统开发和架构设计经验,乐于持续在对应领域深耕;#华为od##华为招聘##华为面试#*************
点赞 评论 收藏
转发
10 56 评论
分享
牛客网
牛客企业服务