46.哀家要长脑子了!

1.435. 无重叠区间 - 力扣(LeetCode)

方法一:动态规划

实际上本质就是找最长的无重叠子序列,那么我们可以遍历这个区间的集合,只要前一个区间的右端点是小于等于后一个区间的左端点,那么这两个区间就不是重合的。用一个数组来存储到每个区间的最长非重叠子序列长度。即 f[i] 就是第i个区间为结尾的非重叠子序列的长度。 每一个区间的计算可以根据上一个区间的情况结合现在区间加入的情况来计算。这就是动态规划的思想体现。将动态规划数组f 所有元素初始化为1 的原因是,每个区间至少有一个不重叠的子序列就是它寄几本身

C++版: 

class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {int n = intervals.size();if(n == 0) return 0;sort(intervals.begin(), intervals.end(), [](const auto &u, const auto &v){return u[1] < v[1];});vector<int> f(n, 1);for(int i = 1; i < n; i++) {for(int j = 0; j < i; j++) {if(intervals[i][0] >= intervals[j][1])f[i] = max(f[i], f[j]+1);}   }return n - *max_element(f.begin(), f.end());}
};

 Java版:

class Solution {public int eraseOverlapIntervals(int[][] intervals) {int n = intervals.length;if(n == 0) return 0;Arrays.sort(intervals, new Comparator<int[]> (){public int compare(int[] u, int[] v){return u[1] - v[1];}});int[] f = new int[n];Arrays.fill(f, 1);for(int i = 1; i < n; i++) {for(int j = 0; j < i; j++) {if(intervals[i][0] >= intervals[j][1]) {f[i] = Math.max(f[i], f[j]+1);}}}return n - Arrays.stream(f).max().getAsInt();}
}

但是动态规划的时间复杂度太高了,leetcode最后几个很大的数据过不了,会超时。 

方法二:贪心

其实我觉得这道题中贪心和动态规划的本质思想是一样的,都是在以区间的右端点升序排序后,比较前一个区间的右端点和后一个区间的左端点大小,以此来判断两个区间是否重叠。只是操作不同,贪心的操作不是用双重循环来遍历,数组来存储。而是在每一次的比较后,遇到非重叠的区间,将旗帜right变量中的右端点不断迭代更新。

C++版

class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {int n = intervals.size();if(n == 0) return 0;sort(intervals.begin(), intervals.end(), [](const auto &u, const auto &v){return u[1] < v[1];});int right = intervals[0][1]; // 第一个区间的右端点int ans = 1;for(int i = 1; i < n; i++) {if(intervals[i][0] >= right) {ans++;right = intervals[i][1];}} return n - ans;}
};

Java版

class Solution {public int eraseOverlapIntervals(int[][] intervals) {int n = intervals.length;if(n == 0) return 0;Arrays.sort(intervals, new Comparator<int[]> (){public int compare(int[] u, int[] v){return u[1] - v[1];}});int ans = 1;int right = intervals[0][1];for(int i = 1; i < n; i++) {if(intervals[i][0] >= right) {ans++;right = intervals[i][1];}}return n - ans;}
}
2.1502. 判断能否形成等差数列 - 力扣(LeetCode)

Java版:

class Solution {public boolean canMakeArithmeticProgression(int[] arr) {Arrays.sort(arr);int dif = arr[1] - arr[0];for(int i = 1; i < arr.length; i++) {if(arr[i] - arr[i-1] != dif)return false;}return true;}
}

 骚瑞啊 直接排序加遍历判断的

3.1277. 统计全为 1 的正方形子矩阵 - 力扣(LeetCode)

C++版:

class Solution {
public:int countSquares(vector<vector<int>>& matrix) {int n = matrix.size(), m = matrix[0].size();vector<vector<int>> f(n, vector<int>(m));int res = 0;for(int i = 0; i < n; i++) {for(int j = 0; j < m; j++) {if(i == 0 || j == 0) f[i][j] = matrix[i][j]; // 它自己本身else if(matrix[i][j] == 0) f[i][j] = 0;else  f[i][j] = min(min(f[i-1][j], f[i][j-1]), f[i-1][j-1]) + 1;     res += f[i][j];}}return res;}
};

Java版

class Solution {public int countSquares(int[][] matrix) {int n = matrix.length, m = matrix[0].length;int[][] f = new int[n][m];int res = 0;for(int i = 0; i < n; i++) {for(int j = 0; j < m; j++) {if(i == 0 || j == 0) f[i][j] = matrix[i][j];else if(matrix[i][j] == 0) f[i][j] = 0;else  f[i][j] = Math.min(Math.min(f[i-1][j], f[i][j-1]), f[i-1][j-1]) + 1;     res += f[i][j];}}return res;}
}

 怎么说。。。我不知道说。。。我似懂非懂。。。我不知所措。。。我想吃山东巧饼。。。

f 数组存储的是 每个[i, j] 位置能构成符合条件的矩阵的最多数量。那么这个数量可以由它的左边,上边,左上边三个区域中最小的一个来决定。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149077.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何将Excel表格嵌入Web网页在线预览、编辑并保存到自己服务器上?

猿大师办公助手作为一款专业级的网页编辑Office方案&#xff0c;不仅可以把微软Office、金山WPS和永中Office的Word文档内嵌到浏览器网页中实现在线预览、编辑保存等操作&#xff0c;还可以把微软Office、金山WPS和永中Office的Excel表格实现网页中在线预览、编辑并保存到服务器…

虚拟机:4、配置12.5的cuda和gromacs

前言&#xff1a;本机环境是win11&#xff0c;通过wsl2安装了ubuntu实例并已实现gpu直通&#xff0c;现在需要下载12.5的cuda 一、查看是否有gpu和合适的cuda版本 在ubuntu实例中输入 nvidia-smi输出如下&#xff1a; 说明该实例上存在gpu驱动&#xff0c;且适合的CUDA版本…

硬件测试(五):信号补偿

一、简介 高速信号的趋肤效应以及传输线的介质损耗&#xff0c;使信号在传输过程中衰减很大&#xff0c;导致最后得到的信号失真。为了在接收终端能得到比较好的波形&#xff0c;就需要对受损的信号进行补偿&#xff0c;常用的补偿技术有&#xff1a;预加重、去加重和均衡三种信…

思科安全网络解决方案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

告别xx搜索,我用这个AI工具...

点击“终码一生”&#xff0c;关注&#xff0c;置顶公众号 每日技术干货&#xff0c;第一时间送达&#xff01; 前段时间&#xff0c;逛 GitHub 的时候发现了一个评估报告&#xff0c;对AI搜索引擎进行了详细的准确性测试&#xff0c;覆盖6种主流语言和5类场景。 其中&#xf…

苍穹外卖上半部分总结

苍穹外卖一个很经典的项目 虽然已经烂大街&#xff0c;但项目依旧是很优秀&#xff0c;并且代码十分规范&#xff0c;很值得学习。 前置介绍 niginx反向代理 前端和后端的url请求不一致的原因&#xff1a;前端是请求到nginx服务器&#xff0c;再由nginx服务器转发到后端 ngi…

箭头与数字识别系统源码分享

箭头与数字识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

《CUDA编程》1.GPU硬件与CUDA环境搭建

1 GPU 介绍 GPU&#xff08;graphics processing unit&#xff09;&#xff0c;意为图形处理器&#xff0c;也被称为显卡&#xff08;graphics card&#xff09;。GPU的浮点数运算峰值就比同时期的CPU高一个量级&#xff1b;GPU的内存带宽峰值也比同时期的CPU高一个量级。 CP…

数据结构 - 排序算法

一.直接插入排序 /*** description: 直接插入排序算法* param - a : 要进行排序的数组的指针* return : 无 */ void Seqsort(int *a) {/* i 用于表示无序部分的第一个元素的下标 &#xff0c; j 用于表示有序部分的最后一个元素的下标 &…

如何登录通义灵码,快速开启AI编码之旅?

通义灵码个人版开发者可以使用阿里云账号登录通义灵码 IDE 端插件&#xff0c;本文介绍个人版开发者登录 IDE 端插件的操作指南。 登录通义灵码 步骤 1&#xff1a;准备工作 已成功注册阿里云账号&#xff0c;具体操作可参考&#xff1a;账号注册&#xff08;PC端&#xff09;…

15.多线程概述(下篇)

目录 1.进程与线程 2.实现多线程方式一&#xff1a;继承Thread类【应用】 3.实现多线程方式二&#xff1a;实现Runnable接口【应用】 4.实现多线程方式三&#xff1a;实现Callable接口【应用】 5.三种实现方式的对比与套路 6.设置和获取线程名称/线程对象【应用】 7.线程优先级…

【编程底层原理】Java常用读写锁的使用和原理

一、引言 在Java的并发世界中&#xff0c;合理地管理对共享资源的访问是至关重要的。读写锁&#xff08;ReadWriteLock&#xff09;正是一种能让多个线程同时读取共享资源&#xff0c;而写入资源时需要独占访问的同步工具。本文将带你了解读写锁的使用方法、原理以及它如何提高…

【重磅】考虑火电机组储热改造的电力系统低碳经济调度

目录 1 主要内容 储热改造原理 约束条件 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑火电机组储热改造的电力系统低碳经济调度》&#xff0c;利用原文献火电机组储热改造方案建立模型&#xff0c;在传统火电机组的基础上加装热能存储系统&#xf…

【每天学个新注解】Day 3 Lombok注解简解(二)—@Log

Log 自动创建并初始化日志记录器 日志系列注解包括&#xff1a;CommonsLog、Flogger、JBossLog、Log、Log4j、Log4j2、Slf4j、XSlf4j、CustomLog&#xff0c;对应于不同的日志框架。每个注解都会在编译时生成一个名为 log 的静态字段&#xff0c;该字段被初始化为对应的日志框…

【小白向】怎么去除视频水印?HitPaw帮你轻松解决

序言 HitPaw是一款优秀的去除视频水印的工具。 特点&#xff1a;不仅仅能够去除图片、视频里的固定水印&#xff0c;还能去除移动水印。 尤其是它的AI去水印功能&#xff0c;效果非常好。 极简使用教程 下载安装 HitPaw需要在电脑上安装软件才能使用。 支持Windows系统和…

基于SpringBoot+Vue+MySQL的旅游推荐管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着社会的快速发展和人民生活水平的显著提高&#xff0c;旅游已成为人们休闲娱乐的重要方式。然而&#xff0c;面对海量的旅游信息和多样化的旅游需求&#xff0c;如何高效地管理和推荐旅游资源成为了一个亟待解决的问题。因此…

JavaSE--IO流总览03:复制照片案例,解决关闭流异常的方法

概述&#xff1a;本篇主要是讲述根据上一篇的知识完成一个小需求&#xff1a;图片的复制&#xff0c;以及关闭流的异常以及解决方法 一.照片的复制&#xff1a; 注意&#xff1a;字节流非常适合做一切文件的复制作 &#xff0c;任何文件的底层都是字节 字节流做复制 是一字不…

MODELS 2024:闪现奥地利,现场直击报道

周末出逃&#xff01;小编闪现至奥地利林茨&#xff0c;亲临第27届MODELS 2024国际会议&#xff0c;以第一视角引领你深入会议现场&#xff0c;领略其独特风采。利用午饭时间&#xff0c;小编紧急码字&#xff0c;只为第一时间将热点资讯呈现给你~ 会议介绍&#xff1a; MODEL…

Cilium + ebpf 系列文章-ebpf-map(二)

前言: 上一章节讲述了什么是:ebpf. Cilium + ebpf 系列文章-什么是ebpf?(一)-CSDN博客一、We Create a container be a Server.二、We Create a container be a Client.三、Them link at a Bridge.四、 Do test.一、Test-tools。3、当你执行l s操作时,会调用open的系统调…

线程对象的生命周期、线程等待和分离

线程对象的生命周期、线程等待和分离 #include <iostream> #include<thread> using namespace std;bool is_exit false;//用于判断主线程是否退出 void ThreadMain() {cout << "begin sub thread main ID: " << this_thread::get_id() &l…