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

物流网站公司网站开发 视频存储

物流网站公司,网站开发 视频存储,爬虫wordpress,小程序开发 网站建设56 合并区间 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. class Solution { public:vector<vector<int>>…

56 合并区间

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

  • 输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
  • 输出: [[1,6],[8,10],[15,18]]
  • 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if (intervals.size() == 0) return result; // 区间集合为空直接返回// 排序的参数使用了lambda表达式sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];});// 第一个区间就可以放进结果集里,后面如果重叠,在result上直接合并result.push_back(intervals[0]); for (int i = 1; i < intervals.size(); i++) {if (result.back()[1] >= intervals[i][0]) { // 发现重叠区间// 合并区间,只更新右边界就好,因为result.back()的左边界一定是最小值,因为我们按照左边界排序的result.back()[1] = max(result.back()[1], intervals[i][1]); } else {result.push_back(intervals[i]); // 区间不重叠 }}return result;}
};

        本题主要技巧是在result数组里面进行重叠操作,而不是在原数组里面进行合并。 

 738 单调递增的数字

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)

示例 1:

  • 输入: N = 10
  • 输出: 9

示例 2:

  • 输入: N = 1234
  • 输出: 1234

示例 3:

  • 输入: N = 332
  • 输出: 299

说明: N 是在 [0, 10^9] 范围内的一个整数

本题如果使用暴力解法,从后往前一个数一个数的遍历,一定会超时,所以采用贪心算法:

如果前一个数比后一个数大,就将后一个数变成9,前一个数减1,从后往前遍历即可,同时,在处理变成9的时候不要直接处理,而是利用一个flag标志记录此时的位置,最后flag后面的所有数一起变成9,例如1000,如果不用flag的话,最后两个00是不会变的:

class Solution {
public:int monotoneIncreasingDigits(int N) {string strNum = to_string(N);// flag用来标记赋值9从哪里开始// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行int flag = strNum.size();for (int i = strNum.size() - 1; i > 0; i--) {if (strNum[i - 1] > strNum[i] ) {flag = i;strNum[i - 1]--;}}for (int i = flag; i < strNum.size(); i++) {strNum[i] = '9';}return stoi(strNum);}
};

 968 监控二叉树

给定一个二叉树,我们在树的节点上安装摄像头。

节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。

计算监控树的所有节点所需的最小摄像头数量。

示例 1:

  • 输入:[0,0,null,0,0]
  • 输出:1
  • 解释:如图所示,一台摄像头足以监控所有节点。

示例 2:

  • 输入:[0,0,null,0,null,0,null,null,0]
  • 输出:2
  • 解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。

提示:

  • 给定树的节点数的范围是 [1, 1000]。
  • 每个节点的值都是 0。

        本题要求的是最少的摄像头,所以尽量让叶子节点的父节点为摄像头,每隔两层安装一个新的摄像头。于是本题采用后序遍历。

        本题分别用数字代表此时的状态:0代表这个点没有被覆盖,1代表本节点有摄像头,2代表本节点被摄像头覆盖。

        一共有四种不同情况:代码如下:

class Solution {
private:int result;int traversal(TreeNode* cur) {// 空节点,该节点有覆盖if (cur == NULL) return 2;int left = traversal(cur->left);    // 左int right = traversal(cur->right);  // 右// 情况1// 左右节点都有覆盖if (left == 2 && right == 2) return 0;// 情况2// left == 0 && right == 0 左右节点无覆盖// left == 1 && right == 0 左节点有摄像头,右节点无覆盖// left == 0 && right == 1 左节点有无覆盖,右节点摄像头// left == 0 && right == 2 左节点无覆盖,右节点覆盖// left == 2 && right == 0 左节点覆盖,右节点无覆盖if (left == 0 || right == 0) {result++;return 1;}// 情况3// left == 1 && right == 2 左节点有摄像头,右节点有覆盖// left == 2 && right == 1 左节点有覆盖,右节点有摄像头// left == 1 && right == 1 左右节点都有摄像头// 其他情况前段代码均已覆盖if (left == 1 || right == 1) return 2;// 以上代码我没有使用else,主要是为了把各个分支条件展现出来,这样代码有助于读者理解// 这个 return -1 逻辑不会走到这里。return -1;}public:int minCameraCover(TreeNode* root) {result = 0;// 情况4if (traversal(root) == 0) { // root 无覆盖result++;}return result;}
};
http://www.15wanjia.com/news/172218.html

相关文章:

  • 精品网站建设费用 找磐石网络一流网站扫二维码怎么做
  • 五莲网站制作惠东县住房和城乡规划建设局网站
  • 做网站最小的字体是多少像素文化建设的中心环节是什么
  • 昆明app网站开发公司广告设计是什么
  • 网站建设备案优化之看惠州市seo上词
  • 顺德网站建设如何网站备案编号查询
  • 计算机应用技术网站开发h5响应式网站建设
  • 哪些网站有设计缺点怎么样才能申请网址
  • 改图网网站谁做的安居客网官网入口
  • 长春网站建设致电吉网传媒优网页游戏网站源码
  • 如何运用网站模板wordpress评论分页不显示
  • 外贸营销网站北京展示型网站
  • 企业网站的常见服务是什么公司网站建设合规吗
  • 建设一个网站需要注意哪些内容百度 营销推广多少钱
  • ps 制作网站建设部法律法规网站
  • 苏州品牌网站设计企业长宁区网站制
  • 建设网站公司网站用dw做音乐网站模板
  • 淘宝做任务网站网站建设郑州
  • 腾讯企点聊天记录老板能看到吗广州seo搜索
  • 鲜花网站开发背景写文案要看的网站
  • 网页站点规划wordpress最好的主题
  • 公司做的网站打开慢重庆网络
  • 免费追剧网站大全佛山商城网站建设
  • 郑州做网站推广电wordpress附件
  • wordpress微站成都 直播 网站建设
  • 做网站如何选择颜色中国正规的加盟网站
  • 现在做网站一般做多宽网络购物商城网站建设
  • 网站建设季度考核评价工作总结老年机浏览器下载怎么安装
  • 外国的免费网站网站爱站长尾词
  • 企业网站排名要怎么做衡水网站建设哪家专业