马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
碎碎念:加油
参考:代码随想录
56. 归并区间
题目链接
56. 归并区间
思想
这道题的核心还是判断重叠区间,本题和之前做过的452. 用最少数目的箭引爆气球、435. 无重叠区间的区别在于判断出重叠区间之后的操作,本题必要做的是归并重叠区间。
首先要让重叠的区间尽大概挨在一起,那么就要对区间排序,本解法用的是对左界限排序。
遍历全部区间,如果当前遍历到的区间的左界限小于等于上一个区间的右界限,那么就发生了重叠,必要继续归并区间的操作,详细做法是修改区间的右界限;如果当前遍历到的区间的左界限大于上一个区间的右界限,没有发生重叠,把上一个区间加入result即可。
题解
- 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) {
- vector<vector<int>> result;
- if (intervals.size() == 0) return result;
- sort(intervals.begin(), intervals.end(), cmp);
- result.push_back(intervals[0]);
- for (int i = 1; i < intervals.size(); i++) {
- if (intervals[i][0] <= result.back()[1]) {
- result.back()[1] = max(intervals[i][1], result.back()[1]);
- } else {
- result.push_back(intervals[i]);
- }
- }
- return result;
- }
- };
复制代码- class Solution:
- def merge(self, intervals: List[List[int]]) -> List[List[int]]:
- result = []
- if len(intervals) == 0:
- return result
- intervals.sort(key=lambda x:x[0])
- result.append(intervals[0])
- for i in range(1, len(intervals)):
- if result[-1][1] >= intervals[i][0]:
- result[-1][1] = max(result[-1][1], intervals[i][1])
- else:
- result.append(intervals[i])
-
- return result
复制代码 反思
不建议像之前一些题的做法一样在原数组上修改,防止遍历的时间混乱。
738.单调递增的数字
题目链接
738.单调递增的数字
思想
遍历数字的每一位,如果发现两位不符合要求,要对前一位减一,后一位要取最大的9。应该从后往前遍历,否则得到的大概不符合题意。
定义了一个flag,表示某一位今后都是9。
题解
- class Solution {
- public:
- int monotoneIncreasingDigits(int n) {
- string str = to_string(n);
- int flag = str.size();
- for (int i = str.size() - 1; i > 0; i--) {
- if (str[i - 1] > str[i]) {
- str[i - 1]--;
- flag = i;
- }
- }
- for (int i = flag; i < str.size(); i++) {
- str[i] = '9';
- }
- return stoi(str);
- }
- };
复制代码- class Solution:
- def monotoneIncreasingDigits(self, n: int) -> int:
- strNum = str(n)
- flag = len(strNum)
- for i in range(len(strNum) - 1, 0, -1):
- if strNum[i - 1] > strNum[i]:
- flag = i
- strNum = strNum[:i - 1] + str(int(strNum[i - 1]) - 1) + strNum[i:]
-
- for i in range(flag, len(strNum)):
- strNum = strNum[:i] + '9' +strNum[i+1:]
-
- return int(strNum)
复制代码 反思
传入的是int类型的,为了方便遍历把它转换为string类型的。
留意关于flag的处置惩罚,为什么设置如许的初始值。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |