【拼多多笔试题】小熊战斗力
解题思路
对小熊战斗力进行排序,糖果填充的饥饿值进行排序
遍历小熊,对其需要的饥饿值在谈糖果中进行二分查找,查找的终止条件为,找到小于等于当最接近小熊需要饥饿值得数字,然后小熊的需要饥饿值减去糖果可以提供的值,如果差值大于0,则继续二分查找,知道二分查找返回-1或者是小熊饥饿值为0。在这里不通过二分直接循环遍历糖果值也是可以AC的。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;public class Main {static class Compare1 implements Comparator<Bear> {@Overridepublic int compare(Bear o1, Bear o2) {// TODO Auto-generated method stubreturn o1.fighting > o2.fighting ? -1 : (o1.fighting < o2.fighting ? 1 : 0);}}static class Compare2 implements Comparator<Bear> {@Overridepublic int compare(Bear o1, Bear o2) {// TODO Auto-generated method stubreturn o1.seq > o2.seq ? 1 : (o1.seq < o2.seq ? -1 : 0);}}static class Bear {int hunger;int fighting;int seq;}// 二分查找public static int find(List<Integer> array, int num) {int low = 0;int high = array.size() - 1;if (array.get(high) <= num)return high;while (low <= high) {int mid = (low + high) / 2;if (mid != array.size() - 1 && array.get(mid) <= num && array.get(mid + 1) > num) {return mid;}if (num > array.get(mid)) {low = mid + 1;} else if (num < array.get(mid)) {high = mid - 1;}}return -1;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();List<Integer> candies = new ArrayList<>();for (int i = 0; i < m; i++) {candies.add(sc.nextInt());}Bear[] bears = new Bear[n];for (int i = 0; i < n; i++) {Bear bear = new Bear();bear.fighting = sc.nextInt();bear.hunger = sc.nextInt();bear.seq = i;bears[i] = bear;}Collections.sort(candies);Arrays.sort(bears, new Compare1());for (int i = 0; i < n; i++) {int hunger = bears[i].hunger;int a = 0;while (hunger > 0 && (a = find(candies, hunger)) != -1) {hunger -= candies.get(a);candies.remove(a);}bears[i].hunger = hunger;}Arrays.sort(bears, new Compare2());for (int i = 0; i < n; i++) {System.out.println(bears[i].hunger);}}
}
【拼多多笔试题】小熊战斗力相关推荐
- 拼多多笔试题 回合制游戏
拼多多笔试题 回合制游戏 题目描述 解法1(深度优先搜索) 解法2(数学规律) 昨晚心血来潮,拿了一份校招真题练练手,无奈这道题一直没有AC,只有75%的通过率,用了深度优先搜索+记忆化搜索最终还是会 ...
- 校招拼多多笔试题(前端工程师)
考试时间:2017-09-02-提前批内推-笔试 1) 测试代码如下: var a = {}; b = { key: 'b' }; c = { key: 'c' }; a[b] = 123; a[c] ...
- 2019提前批——拼多多笔试题
一(85) 给定两个数组A和B.其中数组A是几乎严格升序排列的,几乎的定义是只需改变其 中一个数,即可满足完全升序排列. 你的任务是从数组A中找到这个数字,并从数组B中选取1数将其替换,使得数 组A是 ...
- 拼多多笔试题(三):多多的电子字典
问题描述: 多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成. 每个单词的组成里a的数量不能超过N个且b的数量不能超过M个. 多多鸡的幸运数字是K,它打算把所有满足条件的单词里的字典序第 ...
- 拼多多笔试题(一):多多的魔术盒子
问题描述: 多多鸡有N个魔术盒子(编号1-N),其中编号为i的盒子里有i个球. 多多鸡让皮皮虾每次选择一个数字X(1 <= X <= N),多多鸡就会把球数量大于等于X个的盒子里的球减少 ...
- python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务
实现一个简易的秒杀服务,有3个接口: 1. 添加一个秒杀活动 addActivity(int startTime, int endTime, int goodsId, int limitQuantit ...
- [Nowcoder] 大整数相乘(拼多多笔试题)
有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示.不能用系统自带的大整数类型. 输入描述: 空格分隔的两个字符串,代表输入的两个大整数 输出描述: 输入的乘积,用字符串表示 输入例 ...
- 拼多多笔试题 回合制角色扮演
题目描述 你在玩一个回合制角色扮演的游戏.现在你在准备一个策略,以便在最短的回合内击败敌方角色.在战斗开始时,敌人拥有HP格血量.当血量小于等于0时,敌人死去.一个缺乏经验的玩家可能简单地尝试每个回合 ...
- 拼多多笔试题(六):选靓号
问题描述: A 国的手机号码由且仅由 N 位十进制数字(0-9)组成.一个手机号码中有至少 K 位数字相同则被定义为靓号.A 国的手机号可以有前导零,比如 000123456 是一个合法的手机号. 小 ...
最新文章
- [导入]软件工程和乒乓球
- 扩展 日历_日历功能的拓展:Apple Watch能在屏幕上显示年日历
- Windows 系统如何查看本机的 IP 地址
- 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结
- ceph怎么搭建文件存储_SUSE专家谈Ceph落地之最佳实践
- 【ACL'21】弱标签的垃圾数据,也能变废为宝!
- layui监听多个radio事件
- JavaScript+HTML 实现贪吃蛇简陋版
- GPS原始坐标转百度地图坐标(纯C代码)
- 神是什么?神即道 道法自然 如来 ---《天道》王志文饰丁元英 左小青饰芮小丹
- 《微处理器体系结构》1.1 汇编语言与机器语言及应用
- axure8下拉表单_AXURE RP 8怎么设置下拉菜单? AXURE下拉菜单的制作方法
- es的bucket和metric
- 白嫖亚马逊AWS服务器
- 【菜鸟进阶之路】P6367 [COCI2006-2007#6] PRASE - 洛谷
- Oracle学习(八)——————————————子查询
- oeasy教您玩转linux010203显示logo
- acwing----春季每日一题2022篇(二)
- Cisco之show ip arp 与 show mac-address-table
- 单稳态触发器(cmos门电路构成)-微分型