LeetCode_单周赛_331
2558. 从数量最多的堆取走礼物
题意
给一组数字,每秒都选择最大的一个,留下其平方根
用 最大堆就行
code
class Solution {
public long pickGifts(int[] g, int k) {
long ans = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> (-(a - b)));
for (int i = 0; i < g.length; i++) {
ans += g[i];
pq.add(g[i]);
}
while (pq.size() > 0 && k-- > 0) {
int t = pq.poll();
int a = (int) Math.sqrt(t);
t -= a;
ans -= t;
// System.out.println(a + " " + t);
pq.add(a);
}
return ans;
}
}
2559. 统计范围内的元音字符串数
题意
给一个字符串数组,和 [ l, r ],求数组中下标在 [ l, r ] 范围内的字符串中,以元音字母 aeiou 作为开头和结尾的字符串数量
前缀和
求字符串数组的前缀和即可
code
class Solution {
// 前缀和
public int[] vowelStrings(String[] w, int[][] q) {
int n = w.length;
boolean[] vis = new boolean[26];
vis[0] = true; vis[4] = true; vis[8] = true; vis[14] = true; vis[20] = true;
int[] s = new int[n + 5];
for (int i = 0; i < n; i++) {
int t = 0;
int a = w[i].length();
if (vis[w[i].charAt(0) - 'a'] && vis[w[i].charAt(a - 1) - 'a']) t = 1;
s[i + 1] = s[i] + t;
}
ArrayList<Integer> ans = new ArrayList<>();
for (var t : q) {
int a = s[t[1] + 1] - s[t[0]];
ans.add(a);
}
int[] a = new int[ans.size()];
for (int i = 0; i < ans.size(); i++) {
a[i] = ans.get(i);
}
return a;
}
}
2560. 打家劫舍 IV
题意
一排连续的房屋,偷钱,
- 不能偷相邻的房子
- 最少要偷 k 间房子。
问:
偷钱能力:这一次偷的所有的房子中,最大的金额
满足以上两个条件的情况下,小偷的 最小偷钱能力是多少
求 最大值中的最小值,考虑二分求答案
求出数组中金额的 max 和 min,作为二分的区间
如果当前的 max 满足 check,则 >= max 都满足,向 < max 二分
用 check 函数作为二分的判断
求 check 函数时,当前房子金额 <= x && 隔壁没被偷过,就满足情况,贪心求,尽可能多偷,最后判断是否至少偷了 k 个房子即可。
有没有可能得到不在数组中的数
不可能
设 x 是二分到的不在数组中的数,它满足条件,y 是数组中小于 x 的最大的数
我们的条件是 [ 当前房子金额 <= x ] ,如果 x 满足条件,则 y 偷的房子是和 x 一样多的,最终会回归到数组中的数
code
class Solution {
// check函数作为二分的条件,是 dp / 贪心
// 题目是 求最小的最大值,用二分来搜索答案
public int minCapability(int[] nums, int k) {
int mx = nums[0], mn = nums[0]; // 存储最大最小值,用于二分
for (var i : nums) {
mx = Math.max(mx, i);
mn = Math.min(mn, i);
}
int l = mn, r = mx;
while (l < r) {
int mid = l + r >> 1;
if (check(nums, mid, k)) r = mid;
else l = mid + 1;
}
return l;
}
private boolean check(int[] a, int x, int k) { // 设最大的金额是 x,最少盗取 k 户
int ans = 0; // 盗取的房子数量
for (int i = 0, j = -2; i < a.length; i++) {
if (a[i] <= x && j + 1 < i) {
ans++;
j = i;
}
}
return ans >= k;
}
}
LeetCode_单周赛_331的更多相关文章
- 算法5: LeetCode_单链表_两数相加
题目: * 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. * 请你将两个数相加,并以相同形式返回一个表示和的链表. * 你可 ...
- Leetcode 第133场周赛解题报告
今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...
- 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)
Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...
- H5单页面手势滑屏切换原理
H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 ...
- 快速构建H5单页面切换骨架
在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...
- ASP.NET Aries 入门开发教程9:业务表单的开发
前言: 经过前面那么多篇的列表的介绍,终于到了大伙期待的表单开发了. 也是本系列的最后一篇文章了! 1:表单页面的权限设置与继承 对于表单页面,权限的设置有两种: 1:你可以选择添加菜单(设置为不显示 ...
- 【CSS进阶】伪元素的妙用--单标签之美
最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
随机推荐
- Java-数组工具类Arrays
java.util.Arrays是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作. toSting方法 public static String toString(数组):将参 ...
- Datawhale组队学习_Task03:详读西瓜书+南瓜书第4章
第4章 决策树 4.1 基本流程 #输入:训练集D={${(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}$}; #属性集A=${{a_1,a_2,...,a_d}}$. #过程: ...
- 【大数据面试】Flink 02 基本操作:入门案例、Env、Source、Transform、数据类型、UDF、Sink
二.基本操作 1.入门案例 (1)批处理wordcount--DataSet val env = ExecutionEnvironment.getExecutionEnvironment // 从文件 ...
- 【vue3】element-plus,Checkbox-Group多选框之绑定选中数据不选中问题
今天记录一下在新项目vue3中,使用的element-plus组价库遇到的一个问题!场景如下:有一个表格的column绑定的数组对象,我需要对表格的头部实现动态可配置显示表格列,由于绑定的column ...
- [python] Python二维码生成器qrcode库入门
Python二维码生成器qrcode库入门 qrcode是二维码生成的Python开源库,官方地址为python-qrcode.所有代码见:Python-Study-Notes. 文章目录 Pytho ...
- [python]《Python编程快速上手:让繁琐工作自动化》学习笔记6
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议.SMTP 规定电子邮件应该如何格式化.加密.在邮件服务器之间传递,以及 ...
- [OpenCV实战]39 在OpenCV中使用ArUco标记的增强现实
文章目录 1 什么是ArUco标记? 2 在OpenCV中生成ArUco标记 3 检测Aruco标记 4 增强现实应用 5 总结和代码 5.1 生成aruco标记 5.2 使用aruco增强现实 6 ...
- Html飞机大战(十八): 模块化+项目开源
好家伙,好久好久没有更新这个系列了 为了使文档更方便阅读,使代码更容易维护,来把这个飞机大战模块化 项目已开源: https://gitee.com/tang-and-han-dynasties/ ...
- Ventoy制作启动盘和使用VMware测试启动盘(论文版)
- 1 Ventoy 1.1 Ventoy是什么 Ventoy是可用于制作启动U盘的开源工具,在占用少量引导分区容量后,其他空间依旧可以正常当一般的U盘读写文件.它的最大特点是只要将iso.win. ...
- [WPF]使用Fody提高效率
下载安装及使用 代码实例 public class Person:INotifyPropertyChanged { public event PropertyChangedEventHandler P ...