46.哀家要长脑子了!

news2024/9/23 23:11:42
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.coloradmin.cn/o/2158711.html

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

相关文章

C:内存函数

目录 前言&#xff1a; 一、memcpy 函数的使用及实现 1、memcpy函数的介绍 1.1 memcpy函数参数解读 2、memcpy函数的使用 3、memcpy函数的模拟实现 二、memmove函数的使用及模拟 1、memmove函数的使用 2、memmove函数的模拟实现 三、memset 函数的使用 1、memset函数的…

mybatis 配置文件完成增删改查(五) :单条件 动态sql查询,相当于switch

文章目录 单条件 动态sql查询写测试方法 疑问总结 单条件 动态sql查询 <select id"selectByConditionBySingle" resultMap"brandResultMap">.select *from tb_brandwhere<choose>/*相当于switch*/<when test"status ! null">…

基于Vision-Board的智能应急环境监测控制小车

目录 1 项目概述 1.1 项目背景 1.2 系统功能介绍 1.2.1 下位机智能小车控制系统 1.2.2 微信小程序App 1.2.3 PC上位机App 1.3 框图介绍 1.3.1 主控板卡 1.3.2 小车控制模块 1.3.3 通信模块 1.4 系统使用的技术要点 2 系统硬件设计 2.1 Version board主控板块系统结…

matlab恢复默认窗口布局

1.点击主页&#xff0c;选择布局 2.选择默认&#xff0c;即可恢复到默认的窗口布局

ollama 部署教程(window、linux)

目录 一、官网 二、安装方式一&#xff1a;window10版本下载 三、安装方式二&#xff1a;linux版本docker 四、 模型库 五、运行模型 六、API服务 七、python调用 ollama库调用 langchain调用 requests调用 aiohttp调用 八、模型添加方式 1.线上pull 2.导入 GGU…

HCIA--实验十九:配置接口DCHP

一、实验内容 1.需求/要求&#xff1a; 通过一台5700交换机和一台PC&#xff0c;通过在交换机的接口上配置接口DHCP来实现PC自动获取ip地址。 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.给vlan10配置ip地址&#xff0c;进入vlan10开启接口的DHCP&#xff1…

药用植物的空间多组学:从生物合成途径到工业应用-文献精读51

Spatial multi-omics in medicinal plants: from biosynthesis pathways to industrial applications 药用植物的空间多组学&#xff1a;从生物合成途径到工业应用 摘要 随着分子测序和成像技术的快速发展&#xff0c;药用植物的多组学研究进入了单细胞时代。我们讨论了空间多…

EMT-LTR--学习任务间关系的多目标多任务优化

EMT-LTR–学习任务间关系的多目标多任务优化 title&#xff1a; Learning Task Relationships in Evolutionary Multitasking for Multiobjective Continuous Optimization author&#xff1a; Zefeng Chen, Yuren Zhou, Xiaoyu He, and Jun Zhang. journal&#xff1a; IEE…

2024最新windows 11系统 PHP或者idea编译器-配置Git环境和使用教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 确保电脑上已安装到git,如下图所示&#xff1a;-是已安装好&#xff1a; 安装git教程&#xff1a; Git安装使用教程_git安装教程-CSDN博客 安装流程 点击左上角如图所示&#xff1a; 需要验证git本地 …

认识URL

目录 url定义 定义 实例 url组成 组成 大家看到这时是否会有疑问&#xff1a;我们常用的端口号8080和http默认端口号有什么关系&#xff1f; url定义 定义 url就是统一资源定位符&#xff0c;简称网址。目的是使用url用于访问网络上的资源 实例 url组成 组成 实例&a…

Python 连接mysql数据库,并且执行查询

之前一直在写Java&#xff0c;但是随着python的崛起&#xff0c;自己也被慢慢的带入到了这样的一个阵营&#xff0c;学习python&#xff0c;了解机器学习 曾经有一个.... 不谈曾经&#xff0c;现在的我是一个小菜鸟&#xff0c;用学习Java实现业务的需求来学习python 项目的目…

Python文件读取

文件操作的步骤 打开文件读写文件关闭文件 open()打开函数 使用open()可以打开一个已经存在的文件&#xff0c;或者创建一个新文件 open(name,mode,encoding)name:打开文件的文件名&#xff0c;也可以包含具体路径 mode:设置打开文件的模式&#xff1a;只读、写入、追加等…

【高并发内存池】基本框架 + 固定长度内存池实现 1

高并发内存池 1. 基本框架2. 定长内存池的实现2.1 介绍定长内存池2.2 T* New()2.3 void Delete(T* obj) 3. 源码&#xff08;附赠测试&#xff09;4. 总结 1. 基本框架 高并发内存池主要由三个部分构成&#xff1a; 1.thread cache:用于小于256KB的内存的分配。线程缓存是每个…

解决element plus报错ResizeObserver loop completed with undelivered notifications.

1、问题描述 在使用动态数据切换渲染el-table表格过程中&#xff0c;报错如下&#xff1a; ResizeObserver loop completed with undelivered notifications. 2、解决方案 在网上找了很多办法&#xff0c;包括&#xff1a; 为每一列指定宽度&#xff0c;试了&#xff0c;问题…

【AcWing】基础算法

目录 1、快速排序 1.1 快速排序 1.2 第k个数 2、归并排序 2.1 归并排序 2.2 逆序对的数量 3、二分 3.1 数的范围 3.2 数的三次方根 4、高精度 4.1 高精度加法 4.2 高精度减法 4.3 高精度乘法 4.4 高精度除法 5、前缀和与差分 5.1 前缀和 5.2 子矩阵的和 5.3 …

0.设计模式总览——设计模式入门系列

在现代软件开发中&#xff0c;设计模式为我们提供了优秀的解决方案&#xff0c;帮助我们更好地组织代码和架构。本系列专栏将对设计模式的基本思想、原则&#xff0c;以及常用的分类、实现方式&#xff0c;案例对比、以及使用建议&#xff0c;旨在提高开发者对设计模式的理解和…

数据库的学习

第一章 绪论 基本概念 数据---描述事物的符号 数据库DB---长期存在在计算机内、有组织的、可共享的 大量数据的集合 数据库管理系统DBMS---位于用户和操作系统之间的一层数据管理软件 数据库系统DBS---由数据库、数据库管理系统&#xff08;及其应用开发工具&#xff09;、…

VBA技术资料MF201:添加简单的右键菜单

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Linux bash特性:

命令别名&#xff1a; 命令行定义命令别名&#xff1a; alias cdt‘cd’ alias 别名‘完整命令’ unlias----删除别名 但是断开连接后&#xff0c;再次链接&#xff0c;命令别名会失效&#xff0c;不同窗口别名也不生效 配置文件内更改命令别名&#xff1a; 在对应用户的…

导入时,Excel模板不被下载

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 这是个SSM项目&#xff0c;以前经常遇到这个问题&#xff0c;今天有幸记录下来 [ERROR][o.a.s.r.StreamResult] Can not find a java.io.InputStream with the name [downLoadFile] in the invocation stack…