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 ...
随机推荐
- js高级之函数高级部分
基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 原型与原型链 prototype : 显式原型属性,它默认指向一个Object空对象(即称为: ...
- 【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务
前言: 大概一年多前写过一个部署ELK系列的博客文章,前不久刚好在部署一个ELK的解决方案,我顺便就把一些基础的部分拎出来,再整合成一期文章.大概内容包括:搭建ELK集群,以及写一个简单的MQ服务. ...
- 抓包整理————ip 协议四[十五]
前言 简单了解一下ip 协议选路问题. 正文 比如host1 到 host2是直接传输,因为host1和 host2 是同一交换机,直接arp表知道对方的mac. 第二种是他们是不同网段之间通信. 第 ...
- 万字 HashMap 详解,基础(优雅)永不过时
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 前言 大家好,我是小彭. 在上一篇文章里,我们聊到了散列表的整体设计思想,在后续几篇文章里,我们将以 Jav ...
- python调用c++生成的dll
前言 这个我查询了很多资料,所以到此为止,相当于做一个总结 c++代码如何生成dll #include<iostream> using namespace std; extern &quo ...
- ssm 乱码
1.post乱码:在web.xml中增加解决解决post乱码的过滤器 <!--解决POST乱码问题--> <filter> <filter-name>Charact ...
- ArcGIS API for JS 访问浏览器提示不安全链接的服务时 如何设置
当我们通过ArcGISServer发布了服务后,首先要在要访问的计算机上通过浏览器访问下服务是否可用.但有时候会出现不安全的标识. 如果这样的链接直接放到代码中,可能会加载失败. 代码如下. var ...
- 【SQL】DML语句-SQL更新与删除:单表更新删除与连表更新删除语法
〇.概述 1.资料 sql连表删除:http://www.lanxinbase.com/?tag=sql%E8%BF%9E%E8%A1%A8%E5%88%A0%E9%99%A4 sql实现两表关联更新 ...
- Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数)
需求:Oracle数据库,通过查询,将查询字段的该列结果用逗号拼接成一行. 1. 查询语法 select listagg('字段',',') within group (order by '字段') ...
- Nmap脚本
Nmap的脚本默认存放在Nmap的安装路径的scripts文件夹下Nmap的脚本主要分为以下几类 Auth:负责处理鉴权证书(绕过鉴权)的脚本 Broadcast:在局域网内探查更多服务的开启情况,如 ...