当前位置: 首页 > news >正文

启铭网站建设太原网站建设维护

启铭网站建设,太原网站建设维护,汝南专业网站建设,如何做淘宝客网站2024/5/24 Day38 greedy 435. 无重叠区间 763.划分字母区间 56. 合并区间 遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。如果两个维度一起考虑一定会顾此失彼。 重叠区间问题 435. 无重叠区间 题目链接 435 给定一个区间的集合 i…

2024/5/24 Day38 greedy 435. 无重叠区间 763.划分字母区间 56. 合并区间

遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。如果两个维度一起考虑一定会顾此失彼。

重叠区间问题

435. 无重叠区间

题目链接 435
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。

提交

注意这里是两边都开的括号不重叠

class Solution {
public:class cmp {public:cmp(){}bool operator()(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}};int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), cmp());int arrow = intervals[0][1];int cnt = 1;for (vector<int> interval : intervals) {if (interval[0] >= arrow) {cnt ++;arrow = interval[1];} else {arrow = min (arrow, interval[1]);}}return intervals.size() - cnt;}
};

763.划分字母区间

题目链接 763
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。

返回一个表示每个字符串片段的长度的列表。

第一次提交

未知化为已知, 遍历一遍字符串可以得到一个字母的起始位置和终止位置,之后可以转化成类似区间去重

时间效率意外还很不错。

class Solution {
public:static bool cmp (const pair<int, int>& a, const pair<int, int>& b) {return a.first < b.first;}vector<int> partitionLabels(string s) {unordered_map<char, pair<int, int> > map;for (int i = 0; i < s.size(); i++) {char c = s[i];if (map.count(c)) {map[c].second = i;} else {pair<int, int> temp;temp.first = i;temp.second = i;map[c] = temp;}}vector<pair<int, int> > container;for (unordered_map<char, pair<int, int> > :: iterator  it = map.begin(); it != map.end(); it++) {container.push_back(it->second);}sort(container.begin(), container.end(), cmp);int arrow = container[0].second;int start = 0;vector<int> res;container.push_back(make_pair(s.size(), s.size()));for (pair<int, int> p : container) {if (p.first > arrow) {if (res.size() == 0) {res.push_back(p.first);start = p.first;}else {res.push_back(p.first - start);start = p.first;}arrow = p.second;} else {arrow = max (arrow, p.second);}}return res;}
};

学习题解

随想录

并不需要记录起始位置
可以分为如下两步:

  1. 统计每一个字符最后出现的位置

  2. 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

用数组要比用unordered_map快

class Solution {
public:vector<int> partitionLabels(string s) {int hash[26] = {0};for (int i = 0; i < s.size(); i++) {hash[s[i] - 'a'] = i;}int right = 0;int left = 0;vector<int> res;for (int i = 0; i < s.size(); i++) {right = max(right, hash[s[i] - 'a']);if (right == i) {res.push_back(right + 1 - left);left = right + 1;}}return res;}
};

56. 合并区间

题目链接 56 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

第一次提交

和划分字母区间中我的第一次做法很像

class Solution {
public:static bool cmp(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), cmp);int start = intervals[0][0];int end = intervals[0][1];vector<vector<int>> res;for (vector<int> interval : intervals) {if (interval[0] > end) {vector<int> temp;temp.push_back(start);temp.push_back(end);res.push_back(temp);start = interval[0];end = interval[1];} else {end = max(end, interval[1]);}}vector<int> temp;temp.push_back(start);temp.push_back(end);res.push_back(temp);return res;}
};

并没有很难

http://www.yayakq.cn/news/990183/

相关文章:

  • wordpress小说网站国家建设工程质量检查标准网站
  • 南山网站设计wordpress 修复
  • 购物网站后台好管理吗宜昌哪里做网站
  • 旅游网站首页制作wordpress查询
  • 织梦cms官方网站typo3和wordpress
  • 企业所得税优惠政策最新2023一般纳税人南昌关键词优化软件
  • 做网站现在用什么软件襄樊市网站建设公司
  • wordpress在线建站滕州网站建设招聘
  • 自有网站建设的团队亚瑟中文 在线
  • 漯河网站建设zrgu视频网站建设流程图
  • 建设手机网站价格有什么做网站好用的软件
  • 药品网站建设存在的问题网站设计的内容
  • 长沙市建设网站平台的公司高端酒店网站模板
  • 网站投票系统 js珠海专业制作网站
  • 商丘微网站详情页怎么做
  • 爱唐山做贡献月评十佳投票网站海南e登记app官网下载
  • 网站域名包括哪些论坛推广怎么做
  • 铜仁市住房和城乡建设厅网站sem工资
  • 个人网站制作教程视频wordpress 导航跳转
  • 如何替换网站ico图标深圳十大传媒公司排名
  • 合肥网站建设哪里好室内设计效果图高清
  • 南京装修公司做网站营销型网站九大特点
  • 网站统计分析工具网站建设首期款
  • 韩国大型门户网站网站建设设计官网
  • 缅甸网站网站代理怎么做江西网站备案
  • 青岛谷歌网站建设西安搬家公司
  • 企业建设网站的目的( )深圳公司注销流程
  • 网站站建设建技设术技术合肥做网站行吗
  • 奉贤网站建设企业整合营销系统
  • 网站主机安全wordpress 清理媒体库