leetcode 310周赛
6176. 出现最频繁的偶数元素 - 力扣(LeetCode)
桶思想,将所有的元素放入桶中统计,然后保存找到偶数出现次数最多是几次
然后再遍历桶,找到第一个为偶数且次数和最大次数相同的就立马返回,如果没有找到就返回-1
const int N=110000;
typedef pair<int,int> PII;
class Solution {
public:int mostFrequentEven(vector<int>& nums) {int h[N];memset(h,0,sizeof h);for(int i=0;i<nums.size();i++)h[nums[i]]++;int maxv=0;for(int i=0;i<N;i++){if(i%2==0)maxv=max(maxv,h[i]);}for(int i=0;i<N;i++){if(h[i]==maxv&&i%2==0&&h[i]!=0){return i;}}return -1;}
};
6177. 子字符串的最优划分 - 力扣(LeetCode)
双指针,类似于最长连续不重复子序列
const int N=26;
class Solution {
public:int partitionString(string s) {int h[N];memset(h,0,sizeof h);int res=0;for(int i=0,j=0;i<s.size();){while(j<s.size()&&h[s[j]-'a']==0){h[s[j]-'a']++;j++;}memset(h,0,sizeof h);//记得清空i=j;res++;}return res;}
};
6178. 将区间分为最少组数 - 力扣(LeetCode)
这题是个原题,代码和区间分组一模一样
遇到区间问题,第一个想法就是将左端点或者右端点排序,然后再模拟
这题是贪心,结论就是将左端点排序,然后再创建一个小根堆,如果该区间在这个组里面且该该区间的右端点比小根堆的右端点还小的话就放入堆中
如果发现区间没有交点就将堆顶删除再将该区间插入
最后组的个数就说堆中元素个数
const int N=110000;
struct Range{int l,r;bool operator<(const Range&t)const{return l<t.l;}
}rang[N];
class Solution {
public:int minGroups(vector<vector<int>>& intervals) {int n=intervals.size();for(int i=0;i<n;i++)rang[i]={intervals[i][0],intervals[i][1]};sort(rang,rang+n);priority_queue<int,vector<int>,greater<int>> heap;for(int i=0;i<n;i++){auto t=rang[i];if(heap.empty()||heap.top()>=t.l)heap.push(t.r);//如果和最小的r都有交点那就新开一个组else{heap.pop();//如果发现区间没有交点就替代堆顶的位置heap.push(t.r);}}return heap.size();}
};
6206. 最长递增子序列 II - 力扣(LeetCode)
这题是很经典的最长上升子序列问题 ,用dp的方法做的话时间复杂度是O(n^2),一看数据范围是
10^5用dp做的话肯定会TLE,这就需要思考优化了,一开始我们学过一个优化贪心加二分能够将时间复杂度降低到O(nlogn)以内,但是这里比原来的最长上升子序列多了一个条件两个数之间只能相差k,所以不可以用二分,但是将dp的转移方程中f[i]=max(f[i],f[j]+1)中可以看出,我们要求出区间
j到i中最长的子序列长度,从这里可以看出是区间查询问题,然后单独一个数的最长上升子序列的长度是1,也就是单点修改,由此可以看出可以用线段树或者树状数组来写,线段树的查询和修改时间复杂度是(logn)能够有效的将时间控制在O(nlogn)以内
不过要注意的是,我们在线段树存储的区间 [l,r] 不再是原序列的下标,而是将数中的数值来作为线段树存储的区间,而查询的区间将会变成[x-k,x]查询出来就是在一个数相差不超过k的数中最长的上升子序列长度。
const int N=110000;struct Node{int l,r;int v;
}tr[N<<2];void push_up(int u)
{tr[u].v=max(tr[u<<1].v,tr[u<<1|1].v);
}void build(int u,int l,int r)
{tr[u]={l,r};if(l==r)return;int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);push_up(u);
}void modfiy(int u,int x,int v)
{if(tr[u].l==x&&tr[u].r==x)tr[u].v=v;else{int mid=tr[u].r+tr[u].l>>1;if(x<=mid)modfiy(u<<1,x,v);else modfiy(u<<1|1,x,v);push_up(u);}
}int query(int u,int l,int r)
{if (l > r) return 0;if(tr[u].l>=l&&tr[u].r<=r)return tr[u].v;int mid=tr[u].r+tr[u].l>>1;int mx=0;if(l<=mid)mx=query(u<<1,l,r);if(r>mid)mx=max(mx,query(u<<1|1,l,r));return mx;
}class Solution {
public:int lengthOfLIS(vector<int>& nums, int k) {int mx=0;for(int i=0;i<nums.size();i++)mx=max(mx,nums[i]);build(1,1,mx);for(auto t:nums){int len=query(1,max(1,t-k),t-1);modfiy(1,t,len+1);}return query(1,1,mx);}
};
leetcode 310周赛相关推荐
- AcWing周赛 72 场 LeetCode单周赛 314 场 总结
一.LeetCode单周赛 314 场 1.6200.处理用时最长的那个任务的员工 (1)原题链接:力扣https://leetcode.cn/problems/the-employee-that-w ...
- 【Leetcode】周赛204 罗布乐思
Leetcode周赛204 今天是周赛204,又是被吊打的一天.. 重复至少K次且长度为M的模式 给你一个正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式. 模式 是由一个 ...
- leetcode 310. Minimum Height Trees | 310. 最小高度树(图的邻接矩阵DFS / 拓扑排序)
题目 https://leetcode.com/problems/minimum-height-trees/ 题解 方法1:图的邻接矩阵 DFS(超时) 我一想,这不就是个图嘛,于是随手敲出一个 DF ...
- LeetCode 310. 最小高度树(图 聪明的BFS,从外向内包围)
文章目录 1. 题目 2. 解题 2.1 暴力BFS 2.2 聪明的BFS 1. 题目 对于一个具有树特征的无向图,我们可选择任何一个节点作为根.图因此可以成为树,在所有可能的树中,具有最小高度的树被 ...
- LeetCode 312 周赛
文章目录 6188. 按身高排序 6189. 按位与最大的最长子数组 6190. 找到所有好下标 6191. 好路径的数目 总结 6188. 按身高排序 给你一个字符串数组 names ,和一个由 互 ...
- java 分享巧克力_[leetcode 双周赛 11] 1231 分享巧克力
1231 Divide Chocolate 分享巧克力 问题描述 你有一大块巧克力,它由一些甜度不完全相同的小块组成.我们用数组 sweetness 来表示每一小块的甜度. 你打算和 K 名朋友一起分 ...
- LeetCode 310 最小高度树
题目描述 树是一个无向图,其中任何两个顶点只通过一条路径连接. 换句话说,一个任何没有简单环路的连通图都是一 棵树.给你一棵包含 n 个节点的数,标记为 0 到 n - 1 .给定数字 n 和一个有 ...
- java数青蛙_『字节跳动LeetCode联合周赛』--周赛185(JavaScript) | OFEII
前言
- LeetCode 310. 最小高度树(广度优先遍历)
题目描述 对于一个具有树特征的无向图,我们可选择任何一个节点作为根.图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树.给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的 ...
最新文章
- WPF入门(三)-几何图形之不规则图形(PathGeometry) (2)
- python安装包-在Python中安装包的三种方法
- 图像滤镜艺术---微软自拍APP滤镜实现合集DEMO
- C# -- RSA加密与解密
- Adroid学习之 从源码角度分析-禁止使用回退按钮方案
- nodejs 实现文件拷贝
- php curl发送delte,php Curl如何发起POST DELETE GET POST请求
- 设计模式—工厂模式(思维导图)
- VC字体对话框的初始化
- TCP四次握手断开连接(图解)
- caffee学习——图像切割
- Java 二叉树层次遍历
- 百度网盘突破下载限速
- java百度地图离线开发_【“零起点”--百度地图手机SDK】如何使用离线地图?
- 在奋斗的日子里,傻笑出来
- 1.Btn、Div特效---利用border
- layui 勾选不联动父项 树形控件_layui树形组件重现勾选过程的办法
- 劈荆斩棘:Gitlab 部署 CI 持续集成
- 推荐用于环境识别的机器人摄像头
- Interactive natural language question answering over knowledge graphs论文导读
热门文章
- PDF能修改内容吗,怎么旋转PDF页面
- C语言有趣的编程题:最详细解答谁是凶手?
- Mac上的PowerPoint自定义快捷键
- 11.Linux文件管理命令---diff比较两个文件
- altsore服务器无响应,AltStore手机端越狱工具续签即将发布,后续不用电脑
- Java中的内部类和匿名类
- ios 从assets加载图片_iOS 图片加载和处理
- 如何解决 img 标签四周出现白边的问题
- lua table.new
- Centos解决Mysql异常Incorrect string value: ‘\xE6\xB5\x8B\xE8\xAF\x95‘ for column ‘name‘