字节跳动春招研发部分编程题汇总做题笔记---Java

3.雀魂启动!

小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少。
于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式(例如七对子等),具体的规则如下:

总共有36张牌,每张牌是1~9。每个数字4张牌。
你手里有其中的14张牌,如果这14张牌满足如下条件,即算作和牌
14张牌中有2张相同数字的牌,称为雀头。
除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(例如111,777)

例如:

1 1 1 2 2 2 6 6 6 7 7 7 9 9 可以组成1,2,6,7的4个刻子和9的雀头,可以和牌
1 1 1 1 2 2 3 3 5 6 7 7 8 9 用1做雀头,组123,123,567,789的四个顺子,可以和牌
1 1 1 2 2 2 3 3 3 5 6 7 7 9 无论用1 2 3 7哪个做雀头,都无法组成和牌的条件。

现在,小包从36张牌中抽取了13张牌,他想知道在剩下的23张牌中,再取一张牌,取到哪几种数字牌可以和牌。

输出描述:

输出同样是一行,包含1个或以上的数字。代表他再取到哪些牌可以和牌。若满足条件的有多种牌,请按从小到大的顺序输出。若没有满足条件的牌,请输出一个数字0

示例1

输入例子:
1 1 1 2 2 2 5 5 5 6 6 6 9
输出例子:
9
例子说明:
可以组成1,2,6,7的4个刻子和9的雀头

示例2

输入例子:
1 1 1 1 2 2 3 3 5 6 7 8 9
输出例子:
4 7
例子说明:
用1做雀头,组123,123,567或456,789的四个顺子

示例3

输入例子:
1 1 1 2 2 2 3 3 3 5 7 7 9
输出例子:
0

思路

遍历可加的九个数,然后进行递归判断。

ac代码
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int[] card = new int[10];for (int i=0;i<13;i++)card[in.nextInt()]++;ArrayList<Integer> result = new ArrayList<>();for (int i=1;i<10;i++){if(card[i]>3)continue;card[i]++;if(findRight(card))result.add(i);card[i]--;}for (int x:result)System.out.print(x+" ");}public static boolean findRight(int[] card){boolean flog = false;for (int i=1;i<10;i++){// to delete queif (card[i]<2)continue;card[i]-=2;PriorityQueue<Integer> cards = new PriorityQueue<>();Add(cards,card);flog = proveRight(cards,card);card[i]+=2;if (flog)return true;}return false;}public static boolean proveRight(PriorityQueue<Integer> cards,int[] card){if (cards.isEmpty())return true;boolean flog = false;int now = cards.peek();if (card[now]>=3){for(int i=0;i<3;i++)cards.poll();card[now]-=3;flog = proveRight(cards,card);for(int i=0;i<3;i++)cards.add(now);card[now]+=3;}if (flog)return flog;if (now<=7&&card[now+1]!=0&&card[now+2]!=0){for(int i=0;i<3;i++){card[now+i]-=1;cards.remove(now+i);}flog = proveRight(cards,card);for(int i=0;i<3;i++){card[now+i]+=1;cards.add(now+i);}}return flog;}public static void Add(PriorityQueue<Integer> cards,int[] card){for (int i=1;i<10;i++){for (int x=1;x<=card[i];x++)cards.add(i);}}
}

4.特征提取

小明是一名算法工程师,同时也是一名铲屎官。某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。一个猫咪特征是一个两维的vector<x, y>。如果x_1=x_2 and y_1=y_2,那么这俩是同一个特征。
因此,如果喵咪特征连续一致,可以认为喵咪在运动。也就是说,如果特征<a, b>在持续帧里出现,那么它将构成特征运动。比如,特征<a, b>在第2/3/4/7/8帧出现,那么该特征将形成两个特征运动2-3-4 和7-8。
现在,给定每一帧的特征,特征的数量可能不一样。小明期望能找到最长的特征运动。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
输入描述:
第一行包含一个正整数N,代表测试用例的个数。

每个测试用例的第一行包含一个正整数M,代表视频的帧数。

接下来的M行,每行代表一帧。其中,第一个数字是该帧的特征个数,接下来的数字是在特征的取值;比如样例输入第三行里,2代表该帧有两个猫咪特征,<1,1>和<2,2>
所有用例的输入特征总数和<100000

N满足1≤N≤100000,M满足1≤M≤10000,一帧的特征个数满足 ≤ 10000。
特征取值均为非负整数。

输出描述:

对每一个测试用例,输出特征运动的长度作为一行
示例1

输入例子:

1
8
2 1 1 2 2
2 1 1 1 4
2 1 1 2 2
2 2 2 1 4
0
0
1 1 1
1 1 1

输出例子:

3

例子说明:

特征<1,1>在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3.

思路

记录帧的所有值,并用一个map保存上一次的帧值,主要技巧在,用String保存两个long数据(其实根据题意无法判断long是否够存,所幸够,要不然在找值的时候需要再堆字符串进行处理)。

ac代码

import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int p = in.nextInt();while(p-->0){int n = in.nextInt();int max = Integer.MIN_VALUE;HashMap<String,Integer> before = new HashMap<>();HashMap<String,Integer> now = new HashMap<>();while(n-->0){int m = in.nextInt();for (int i=0;i<m;i++){long x = in.nextLong();long y = in.nextLong();String now_key = String.valueOf(x)+" "+String.valueOf(y);int now_value = before.getOrDefault(now_key,0)+1;max = Math.max(now_value,max);now.put(now_key,now_value);}before.clear();before.putAll(now);now.clear();}System.out.println(max);}}
}

5.毕业旅行问题(没做出来,思路贴了参考答案)

小明目前在做一份毕业旅行的规划。打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销。给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
输入描述:
城市个数n(1<n≤20,包括北京)

城市间的车票价钱 n行n列的矩阵 m[n][n]

输出描述:

最小车费花销 s
示例1

输入例子:

4
0 2 6 5
2 0 4 4
6 4 0 2
5 4 2 0

输出例子:

13

例子说明:

共 4 个城市,城市 1 和城市 1 的车费为0,城市 1 和城市 2 之间的车费为 2,城市 1 和城市 3 之间的车费为 6,城市 1 和城市 4 之间的车费为 5,依次类推。假设任意两个城市之间均有单程票可购买,且票价在1000元以内,无需考虑极端情况。

思路

本来想的是进行回溯,后来计算复杂度是n的阶乘,肯定超时,但是没想到好的方法,找到了一个解析是用dp的这里贴一下解答。
思路就是用dp记录做每次加入单个城市路径的记录。
复杂度是O(2的n次方n的平方)
n最大20,10的六次方
400 超时边界,基本不会超时。

ac代码
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[][] road = new int[n][n];for (int i=0;i<n;i++)for (int j=0;j<n;j++)road[i][j] = in.nextInt();// dp[i][j] ,replace the distance of  i to(j) until 0;int[][] dp = new int[n][1<<(n-1)];for (int i=1;i<n;i++)dp[i][0] = road[i][0];for (int p=1;p<1<<(n-1);p++){for (int i=0;i<n;i++){dp[i][p] = Integer.MAX_VALUE>>1;if (is_p(i,p))continue;for (int now=1;now<n;now++){if (is_p(now,p)){int before = find(now,p);dp[i][p] = Math.min(dp[i][p],dp[now][before]+road[i][now]);}}}}System.out.println(dp[0][(1<<(n-1))-1]);}public static boolean is_p(int i,int p){   // 0 (为起始或者中间) 这件事一直都对return  ((1<<(i-1))&p)!=0;}public static int find(int i,int p){
//        return (p & (~(1 << (i - 1))));return p-(1<<(i-1));}}

7

思路:反向求解
如果是H(k+1) > E ,假设跳跃后为E_2,有 E_2 = E - (H(k+1) - E) = 2E - H(K+1);
如果是H(k+1) <= E,假设跳跃后为E_2,有 E_2 = E + (E - H(k+1)) = 2E - H(K+1);
无论哪种情况,最终都有 E_2 = 2E - H(K+1); -> E = (E_2 + H(k+1) + 1)/2 -> 加一是为了向上取整。

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[] nums = new int[n];for(int i=0;i<n;i++)nums[i] = in.nextInt();long result = 0;for(int i=n-1;i>=0;i--){result = (result+nums[i]+1)/2;}System.out.println(result);
}
}

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

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

相关文章

Java基础知识总结(14)

map集合 /* java.util.Map接口中常用的方法 1、Map和Collection 没有继承关系 2、Map集合以key和value的方式存储数据&#xff1a;键值对key和valuea都是引用数据类型key和value都是存储对象的内存地址key起到主导地位&#xff0c;value是key的一个附属品 3、Map接口中常用的方…

GDAL实现大幅影像的快速读取

这里做个备份&#xff0c;原文链接 遥感影像小则几百兆&#xff0c;大则5,6GB&#xff0c;所以在使用GDAL进行图像读取时面临读写速度较慢的问题&#xff0c;我们可以深入研究gdal中RasterIO函数的机制&#xff0c;发现该函数是通过一行一行读取影像来实现影像读入内存的&…

【教学类-40-01】20240322 幼儿视力检查照片合成GIF

作品展示——GIF动图 背景需求&#xff1a; 2024年3月22日&#xff0c;中班幼儿视力检查&#xff0c;保健老师表扬我们班幼儿视力正常率高。 我为每位孩子拍照时&#xff0c;突然想把动作图用Python变成GIF图片&#xff0c;于是每位孩子都拍了多张“辨认视力表的不同手势”&a…

基于Springboot的西安旅游系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的西安旅游系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

动态规划(算法竞赛、蓝桥杯)--单调队列优化绿色通道

1、B站视频链接&#xff1a;E45 单调队列优化DP 绿色通道_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N5e410; int n,tim,w[N],f[N],q[N];bool check(int m){int h1,t0;for(int i1; i<n; i){while(h<t && f[q[t]]>f[i-…

visual studio卸载几种方法

1、控制面板卸载&#xff1b; 2、有时候会发现控制面板卸载会失败&#xff0c;无法卸载&#xff0c;这时候要先把下面目录的关于visual studio的都删除&#xff0c;然后重启电脑后&#xff0c;重新安装vs即可。

使用echart绘制拓扑图,树类型,自定义tooltip和label样式,可收缩

效果如图&#xff1a; 鼠标移上显示 vue3 - ts文件 “echarts”: “^5.4.3”, import { EChartsOption } from echarts import * as echarts from echarts/core import { TooltipComponent } from echarts/components import { TreeChart } from echarts/charts import { C…

复试专业前沿问题问答合集10-1——区块链与加密货币

复试专业前沿问题问答合集10-1——区块链与加密货币 区块链与加密货币安全以及6G通信的基础知识问答: 区块链以及加密货币相关的基础安全知识 包括区块链如何确保交易安全、共识机制的作用、加密货币钱包的保护措施、智能合约的工作原理以及如何防范潜在的网络攻击。这些知…

vue项目实现---用户在页面没有操作5分钟时退出登录

方案1: 后端处理 (1)用户切换页面或者点击按钮时需要发送请求接口,如果后端判断在5分钟之内没有请求,然后将前端的token失效 方案2: 前端处理 (1)在main.js中创建全局的事件监听器来实现对键盘抬起事件和鼠标点击事件的监听 试例:Vue 项目中全局监听键盘抬起事件和鼠标点击…

【笔记】KaiOS SPN显示逻辑

更新流程code 1、gonk/dom/system/gonk/radio/RadioInterfaceLayer.jsm handleNetworkStateChanged -> requestNetworkInfo() -> handleRilResponse的getOperator -> handleOperator handleNetworkStateChanged:网络状态变化请求网络信息 this.requestNetworkInfo…

实用福利网站分享

1.http://www.w3school.com.cn w3school&#xff0c;很好的在线web学习网站&#xff0c;免费 2.https://sklearn.apachecn.org sklearn文档&#xff0c;虽然是文档&#xff0c;但能学到很多很多具体的机器学习例子和知识 3.http://www.runoob.com 菜鸟教程&#xff0c;也是…

实验6-10 统计单词的长度(PTA)

题目&#xff1a; 本题目要求编写程序&#xff0c;输入一行字符&#xff0c;统计每个单词的长度。所谓“单词”是指连续不含空格的字符串&#xff0c;各单词之间用空格分隔&#xff0c;空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输出每个单词的…

阿里云2核4G云服务器ECS和轻量应用服务器价格表

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

【postgresql 基础入门】表的约束(一)主键与外键,数据的实体完整性与参照完整性,外键引用数据被修改时的动作触发

主键与外键-表的约束(一) ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 系列文章…

2核4G服务器阿里云性能测评和优惠价格表

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

Debezium日常分享系列之:Debezium2.5稳定版本之数据类型映射

Debezium日常分享系列之&#xff1a;Debezium2.5稳定版本之数据类型映射 一、基本类型二、时间类型三、Decimal类型四、Boolean values布尔值五、Spatial types空间类型六、Debezium技术总结 Debezium MySQL 连接器表示对带有事件的行的更改&#xff0c;这些事件的结构类似于该…

MySQL数据库存储引擎MyISAM与InnoDB

前言 MySQL存储引擎是MySQL数据库中负责管理数据存储和检索的组件&#xff0c;不同的存储引擎提供了不同的功能和特性&#xff0c;可以根据实际需求选择合适的存储引擎来优化数据库性能和功能。以下是一些常见的MySQL存储引擎&#xff1a;InnoDB、MyISAM、MEMORY、NDB Cluster…

【LeetCode】--- 动态规划 集训(一)

目录 一、1137. 第 N 个泰波那契数1.1 题目解析1.2 状态转移方程1.3 解题代码 二、面试题 08.01. 三步问题2.1 题目解析2.2 状态转移方程2.3 解题代码 三、746. 使用最小花费爬楼梯3.1 题目解析3.2 状态转移方程3.3 解题代码 一、1137. 第 N 个泰波那契数 题目地址&#xff1a…

苏州城市学院芮国强一行莅临聚合数据走访调研

3月19日&#xff0c;苏州城市学院校党委书记芮国强、校长赵志宏一行莅临聚合数据&#xff0c;就数据科技赋能行业升级展开调研。聚合数据董事长左磊接待来访。 城市学院党委理论学习中心组一行参观了聚合数据展厅&#xff0c;了解了聚合数据的发展历程、数据产品、应用案例、奖…

QT信号和槽机制connect用法

信号与槽机制是绝对不可或缺且常用的&#xff0c;其中的参数一般都会比较简单&#xff0c;bool、int、QString之类的&#xff0c;但当我们想要传递相对比较复杂的参数&#xff0c;例如QVector<int>、QList<QString>&#xff0c;以及一些我们自定义的结构体时&#…