牛客笔试小题

news2024/9/23 13:18:46

目录

牛客.小红取数

 牛客.哈夫曼编码​编辑

牛客.字符编码(上一道题的资料)

牛客.最小的完全平方数


牛客.小红取数

01背包问题:在满足总和必须为k的倍数的情况下,选择最大的总和

1.状态表示:

dp[i][j]:表示从前面i个数字中挑选,总和%k等于j时候,最大的和是多少

因为这个同余定理

2.状态转移方程

不选dp[i-1][j];

选择的话就是

dp[i][j]=dp[i-1][j-a[i]%k]+a[i];

但是j-a[i]%k又可能为负数,此时修正就再加上k即可,但是加k,又会面对超的问题

(j-a[i]%k+k)%k

从前面为0的数字,我都没有数字,啥都选不到,那么余数就是0,但是其他是非法的,所以不能让他选择这里面的值进行参考。

这块的调试,做个参考,用的例子就是测试用例。我们可以看到,最开始第一个数字的余数只能有一个数字是4,结果没想到全变成4了,这也就是说,这个用了上面的0处非法值,所以才要初始化。

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            int k = in.nextInt();
            long[]a=new long[n+1];
           for(int i=1;i<=n;i++){
             a[i]=in.nextLong();
           }
           long[][]dp=new long[n+1][k];
           //余数只有可能[0-k-1]
           for(int i=0;i<=n;i++){
            for(int j=0;j<k;j++){
//一定要初始化一个足够大的数字
//因为我们这个并不知道他会去上一层找哪一个,所以我们需要初始化负无穷,让他不去考虑这些事情
                   dp[i][j]=-0x3f3f3f3f3f3f3f3fL;
            }
           }
//前面0个数字里面挑选
           dp[0][0]=0;
        for(int i=1;i<=n;i++){
         for(int j=0;j<k;j++){   
           dp[i][j]=Math.max(dp[i-1][(int)(j-a[i]%k+k)%k]+a[i],dp[i-1][j]);
    }
        }

    if(dp[n][0]>0){
        System.out.print(dp[n][0]);
    }else{
        System.out.print(-1);
    }

    } 
}

 牛客.哈夫曼编码

刚开始压缩存储,找到里面每个字符存的次数,然后根据次数编辑01字符串,但是假如出现用某序列表示某个字符,但是面临的问题就是,序列中有的是可拆分的,比如说

world 可以拆分 w orld ,wo rld 这种等等

输出最后带权路径长度

边构建,一边统计

比如我们会用到下面的一个1,一个2

1+2,还会用到上面着两个三,也就是1+2+3+3即可。小根堆,弹出两个,然后相加,放里面一个。

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
            int n = in.nextInt();
            PriorityQueue<Long>q=new PriorityQueue<>();         long sum=0;
           for(int i=0;i<n;i++){
            q.add(in.nextLong());
           }

           //构建最优二叉树,最后的那一层不去算,因为最后添加的是6
           while(q.size()>1){
            long t1=q.poll();
            long t2=q.poll();
            q.add(t1+t2);
            sum+=t1+t2;
           }
          
            System.out.print(sum);
            


        
    }
}

牛客.字符编码(上一道题的资料)

M:2

T:3

-:2

E:2

C:1

H1

A:1

先从小的开始依次连接

问题是一样的

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
        int []hash=new int[300];
        PriorityQueue<Integer>q=new PriorityQueue<>();
        char[]s=in.next().toCharArray();
         for(int i=0;i<s.length;i++){
//这道题的哈希表就别-A,啥的了,他的字符不一定都是啥,但是哈希表做到全统计了就好
            hash[s[i]]++;
         }
         for(int i=0;i<300;i++){
            if(hash[i]!=0){
                q.add(hash[i]);
            }
         }
         int sum=0;
         while(q.size()>1){
            int a=q.poll();
            int b=q.poll();
            q.add(a+b);
            sum+=a+b;
         }
         System.out.println(sum);
        }
        
    }
}

牛客.最小的完全平方数

 

很是玄妙的思想,需要好好啃食,最好用两个例子,一测试就明白了

初始化dp[0][0]=0,其余为无效的值。

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        //从前i个数字中挑选,总和恰好为j时候,最少的跳出来的个数
        int[][]dp = new int[n][n + 1];
        for (int j = 0; j <= n; j++) {
            dp[0][j] = 0x3f3f3f3f;
        }
        dp[0][0] = 0;
        for (int i = 1; i <= Math.sqrt(n); i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = dp[i - 1][j];
                if (j - i * i >= 0) {
                    dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - i * i] + 1);
                }
            }
        }
        System.out.print(dp[(int)Math.sqrt(n)][n]);

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java SpringBoot+Vue实战教程:如何一步步实现Cosplay论坛设计与实现

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

JWT-JSON Web Token

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案。 1 跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 用户向服务器发送用户名和密码。服务器验证通过后&#xff0c;在当前对话(session)里面保存相关数据&#xff0c;比如用…

8.23题目:矩阵数字查找

一些闲话&#xff1a; 小编打算给这个刷题系列改个名&#xff0c;以后就用日期做标题吧&#xff0c;哪一天写了就写哪一天的日期&#xff0c; 不然就跑题了&#xff0c;你说是吧&#xff01;啊啊啊&#xff0c;根本做不到每日一题&#xff01;&#xff01;~~>_<~~ 一、…

Mix|使用VS2017CMake构建Qt工程 仿照MVS(仅用于学习)

MVS下载链接&#xff1a;https://www.hikrobotics.com/cn/machinevision/service/download/?module0 CMake工程构建参考&#xff1a;CMake|VS2017CMake3.8搭建Qt项目 文章目录 效果图整体结构实现代码最外层CMakeLists.txt代码实现及CMakeLists.txt搭建CMakeLists.txt搭建主函…

适应CLIP作为图像去雾的聚合指导

Adapt CLIP as Aggregation Instructor for Image Dehazing 2408.12317 (arxiv.org) 大多数去雾方法都存在感受野有限的问题&#xff0c;并且没有探索视觉-语言模型中蕴含的丰富语义先验&#xff0c;这些模型已在下游任务中被证明是有效的。 本文介绍了CLIPHaze&#xff0c;这…

如何使用ssm实现汽车养护管理系统

TOC ssm038汽车养护管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。…

NAND闪存制造商Kioxia申请IPO,预计市值达103亿美元

据《日本经济新闻》报道&#xff0c;全球第三大NAND闪存制造商Kioxia已向东京证券交易所提交了首次公开募股&#xff08;IPO&#xff09;申请&#xff0c;计划于10月上市。根据《金融时报》的消息&#xff0c;Kioxia希望通过此次IPO筹集至少5亿美元的资金&#xff0c;并可能获得…

Circuitjs web 在线电路模拟器应用简介

Circuitjs 是一款 web 在线电路模拟器, 可以在浏览器上方便地模拟各种模拟或数字的电路, 用户无需安装各种软件, 生成的电路也支持在线分享给其它用户. 访问地址 下述地址我部署的一个版本: https://cc.xiaogd.net/ 此版本的特色是界面翻译成中文时尽量保留了英文, 因此在某…

VBA语言専攻T3学员领取资料通知0823

T3学员领取资料通知0823 各位学员∶本周MF系列VBA技术资料增加706-725讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月23日晚上19:00-8月24日上午11:00。本次增加内容&#xff1a; MF706:在同一页面上打印多个范围 MF707:通过合并行打印多个范围 MF708:将多表中的多…

mathtype7永久激活码密钥及2024最新序列号附安装教程

MathType7是一款强大的数学公式编辑器&#xff0c;它可以在各种文档中插入复杂的数学公式和符号。它的特点包括&#xff1a; MathType最新mac官方版本下载如下: https://wm.makeding.com/iclk/?zoneid61764 MathType最新win官方版本下载如下: https://wm.makeding.com/icl…

代谢组数据分析(十八):随机森林构建代谢组诊断模型

本文参考Metabolomic machine learning predictor for diagnosis and prognosis of gastric cancer撰写。 使用随机森林算法和LASSO特征选择构建了一种胃癌(GC)诊断预测模型。参与者(队列1,n=426)通过随机分层抽样分为发现数据集(n=284)和测试集(n=142)。接下来,在发…

社区流浪动物救助系统-计算机毕设Java|springboot实战项目

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

Linux下进程间的通信--信号

信号的概念&#xff1a; 在Linux操作系统中&#xff0c;信号是一种软件中断机制&#xff0c;用于通知进程某个事件已经发生。信号是Linux进程间通信&#xff08;IPC&#xff09;的一种简单且快速的方式&#xff0c;它可以用来处理各种异步事件&#xff0c;如用户输入、硬件事件…

DAG计算框架:实现业务编排

文章目录 DAG如何实现DAG计算框架Node的实现Engine的实现Graph的实现具体某个节点如何使用 在工作几年之后&#xff0c;大部分人如果还在继续做着 CRUD的简单重复工作&#xff0c;即使领导不提出对你更高的期望&#xff0c;自身也会感到焦虑吧。学如逆水行舟不进则退&#xff…

解锁Spring Boot、Prometheus与Grafana三合一:打造你的专属自定义指标炫酷大屏!

1. 集成Prometheus到Spring Boot 需要在Spring Boot应用中集成Prometheus。可以通过micrometer库来实现。micrometer是一个应用程序监控库&#xff0c;它支持多种监控系统&#xff0c;包括Prometheus。 一招制胜&#xff01;Spring Boot、Prometheus和Grafana三剑合璧&#x…

数仓工具使用Docker部署DolphinScheduler 3.2.0 (分布式任务调度系统)-单机模式

Apache DolphinScheduler——开源大数据调度器神器 Apache DolphinScheduler(海豚调度),国人之光&#xff0c;是许多国人雷锋开源在Apache的顶级项目&#xff0c;主要功能就是负责任务的调度处理&#xff0c;Apache DolphinScheduler是一个分布式去中心化&#xff0c;易扩展的可…

C++--map和set

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.2 map 3.3 multiset 3.4 multimap 4.底层结构 4.3红黑树与AVL树的比较 1. 关联式容器 前面我们已经接触过 STL 中的部分容器&#xff0c;比如&#xff1a; vector 、 list 、 deque、 forward_list(…

自建CDN/WAF解决方案--GoEdge

目录 概述 核心功能 典型应用场景 优点 适用对象 安装 使用 域名准备 DNSPOD的API秘钥申请 添加DNS厂商账号 添加集群 添加节点 添加网站 工作原理 概述 GoEdge 是一款高性能的、支持多种功能的反向代理服务器&#xff0c;通常用于流量管理、负载均衡、安全防护等…

layui2.9 树组件默认无法修改节点图标,修改过程记录下

官方文档树组件 data 参数值&#xff0c;未提供icon属性配置 需要修改源码 layui.js, 搜索图片中标记部分 查找到之后&#xff0c;修改为 <i class“‘(i.icon || “layui-icon layui-icon-file”)’”> 如图&#xff1a; 修改完成后&#xff0c;即可在data中添加icon…

Mysql双主双从

双主双从 1.安装Mysql1.1 查看linux版本1.2 下载Mysql安装包1.3 上传并解压1.4 安装Mysql1.5 编辑端口号1.6 Mysql启动命令1.7 更新密码 2.搭建Mysql主从复制2.1 搭建Master主服务器2.1.1 修改mysql配置文件2.1.2 重启Mysql服务2.1.3 创建Slave用户, 并授权2.1.4 查看主服务器当…