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 ...
随机推荐
- gin领域层:用户实体编写和值对象(初步)
1.用户实体和值对象 2. 要做的事 3.常见的四层模型 4.Domin层 5.值对象
- Go语言核心36讲40
我相信,经过上一次的学习,你已经对strings.Builder和strings.Reader这两个类型足够熟悉了. 我上次还建议你去自行查阅strings代码包中的其他程序实体.如果你认真去看了,那 ...
- 将现有源码添加进repo管理
将现有源码添加进repo管理 适用于大型项内无源码管理(git/repo)的源码 前言 公司在进行一些项目的开发时,从供应商原厂给的code内没有包含任何源码管理的文件.需要多人协同开发,但由于项 ...
- PLSql在Oracle中创建表空间
create tablespace db_test --表空间名 datafile 'D:\oracle\product\11.2.0\dbhome_1\oradata\orcl\test.dbf' ...
- 通过Shell脚本自动安装Hive&JDBC测试&提供CDH5网盘地址
〇.参考地址 1.Linux下编写脚本自动安装hive https://blog.csdn.net/weixin_44911081/article/details/121227024?ops_requ ...
- 【Java SE】Day01 前言、入门程序、常量、变量
回顾一下Java之前学的内容 Day01 前言.入门程序.常量.变量 一.基础知识 莱布尼茨发明二进制,辗转相除与8421位权法互转,1B=1bit=1字节=8位=8byte dos cls清屏dir ...
- 记一次 .NET 某工控软件 内存泄露分析
一:背景 1.讲故事 上个月 .NET调试训练营 里的一位老朋友给我发了一个 8G 的dump文件,说他的程序内存泄露了,一时也没找出来是哪里的问题,让我帮忙看下到底是怎么回事,毕竟有了一些调试功底也 ...
- 真正“搞”懂HTTP协议06之body的玩法(理论篇)
本来啊,本来,本来我在准备完善这个鸽了四年的系列的时候,是打算按照时间的顺序来完成的,好吧.我承认那个时候考虑的稍稍稍稍稍微有些不足,就是我忽略了HTTP协议的"模块性".因为虽然 ...
- java的基本数据类型自动转换
本文主要内容阐明java的自动数据类型转换 首先明确,数据总是由精度低到精度高方向转换 public class AutoConvert { public static void main(Strin ...
- VUE 使用md5对用户登录密码进行加密传输
VUE 使用md5对用户登录密码进行加密传输到数据库 前言 第一步 npm下载js-md5依赖包 第二步 引入js-md5 直接在需要使用md5加密的页面引入 全局挂载,将js-md5添加到vue原型 ...