【代码随想录算法训练营——Day28】贪心算法——56.合并区间、738.单调递增的数字、968.监控二叉树
LeetCode题目链接
https://leetcode.cn/problems/merge-intervals/
https://leetcode.cn/problems/monotone-increasing-digits/
https://leetcode.cn/problems/binary-tree-cameras/
题解
56.合并区间
自己写出来了,好棒。需要注意神奇的语句end = max(end, intervals[i][1]);
。
738.单调递增的数字
这题注意int和string类型转换的方法,转成数字9的做法。
968.监控二叉树
难题,下周目写。
代码
//56.合并区间
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;class Solution {
private:static bool cmp(const vector<int> a, const vector<int> b) {if (a[0] == b[0]) return a[1] < b[1];return a[0] < b[0];}
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>>result;if (intervals.size() == 0) return result;sort(intervals.begin(), intervals.end(), cmp);int end = intervals[0][1], start = intervals[0][0];for (int i = 1;i < intervals.size();i++) {if (end < intervals[i][0]) {result.push_back({ start, end });start = intervals[i][0];end = intervals[i][1];}else {end = max(end, intervals[i][1]);}}result.push_back({ start, end });return result;}
};int main() {vector<vector<int>> nums1 = { {1,3} ,{2,6},{8,10},{15,18} }, nums2 = { {1,4} ,{4,5} }, nums3 = { {4,7} ,{1,4} }, nums4 = { {1,4} ,{2,3} };Solution s;vector<vector<int>> result = s.merge(nums4);for (int i = 0;i < result.size();i++) {for (int j = 0;j < result[i].size();j++) {printf("%d ", result[i][j]);}printf("\n");}return 0;
}
//738.单调递增的数字