算法刷题笔记

news2024/11/24 20:08:26

1.力扣-1337.矩阵中战斗力最弱的K行

给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。
请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。
如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。
军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。
示例 1:
输入:mat =
[[1,1,0,0,0],
[1,1,1,1,0],
[1,0,0,0,0],
[1,1,0,0,0],
[1,1,1,1,1]],
k = 3
输出:[2,0,3]
解释:
每行中的军人数目:
行 0 -> 2
行 1 -> 4
行 2 -> 1
行 3 -> 2
行 4 -> 5
从最弱到最强对这些行排序后得到 [2,0,3,1,4]
示例 2:
输入:mat =
[[1,0,0,0],
[1,1,1,1],
[1,0,0,0],
[1,0,0,0]],
k = 2
输出:[0,2]
解释:
每行中的军人数目:
行 0 -> 1
行 1 -> 4
行 2 -> 1
行 3 -> 1
从最弱到最强对这些行排序后得到 [0,2,3,1]
提示:
m == mat.length
n == mat[i].length
2 <= n, m <= 100
1 <= k <= m
matrix[i][j] 不是 0 就是 1

答案

 vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
        int m = mat.size();
        int n = mat[0].size();
        vector<pair<int,int>> midv;

        for(int i=0;i<m;i++){
            int l=0,r=n-1,pos=-1;
            while(l<=r){
                int mid = l+(r-l)/2;
                if(mat[i][mid]==0){
                    r = mid -1;
                }else{
                    pos = mid;
                    l = mid + 1;
                }
            }
            midv.emplace_back(pos+1,i);
        }
        sort(midv.begin(),midv.end());
        vector<int> v;
        for(int i=0;i<k;i++){
            v.push_back(midv[i].second);
        }
        return v;
    } 

知识点1

二维数组默认sort及自定义sort函数

//sort对二维数组排序规则- 按每一行规则排序,默认从小到大,先比第一列,也就是每行的第一个,小的则会移动到最前边,后边依次。 
示例:
bool cmp(vector<int>x, vector<int>y){
	return x[0]>y[0]||x[0]==y[0];
}
void show1(vector<int>v){
    cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;
}
int main() {
	vector<vector<int>>nums={{2,1,3},{10,4,2},{2,0,6}};
	//若map中加入 cmp 则会按每一行指定的列形式排序。此时是x[0],那么就是按照每一行的第0列进行比较排序,x[0]>y[0]就是递减排序,就不会比较其他列.
	sort(nums.begin(),nums.end());
	for_each(nums.begin(),nums.end(),show1);
	return 0;
}

打印结果:此时是先根据每一行的将第一列进行比较,对2 0 6 和 2 1 3,第一列的2一样,因此比较第二列的0 和 1,0小于1,所以2 0 6在2 1 3前边,同理,2=2<10,因此10 是在最后一行。
在这里插入图片描述

加入cmp函数:按照每一行的第一列进行排序
在这里插入图片描述在这里插入图片描述

知识点2

# 键值对形式不仅有map,vector也可以使用,如:
	vector<pair<int,int>> midv;
# 其添加数据的形式同vector:
	midv.emplace_back(pos+1,i);
# 取数据同vector:
	for(int i=0;i<midv.size();i++){
		cout<<midv[i].first<<"-"<<midv[i].second<<endl;
	}
# 其使用sort的规则同上述二维数组
	sort(midv.begin(),midv.end());

效果图
在这里插入图片描述

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

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

相关文章

C语言分析基础排序算法——归并排序

目录 归并排序 递归版本 非递归版本 非递归版本的问题 归并排序小优化 归并排序 归并排序&#xff0c;分为分治以及合并&#xff0c;分治部分可以使用递归或者非递归完成&#xff0c;归并排序的基本思路是&#xff1a;将已有序的子序列合并&#xff0c;得到完全有序的序列…

探索递归函数:C语言中的使用方法

递归函数是一种在程序设计中常见且强大的工具&#xff0c;它可以将一个问题分解成更小的子问题&#xff0c;并通过反复调用自身来解决这些子问题。在C语言中&#xff0c;递归函数的运用极大地增强了程序的灵活性和可读性。本文将探讨C语言中如何使用递归函数&#xff0c;以及递…

Python之Web开发中级教程----搭建Web框架二

Python之Web开发中级教程----搭建Web框架二 搭建虚拟环境 虚拟环境的作用 虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响. 搭建虚拟环境 &#xff08;1&#xff09;安装 sudo pip install virtualenv sudo pip install virtualenvwra…

JUC之AQS

AQS抽象的队列同步器 public abstract class AbstractQueuedSynchronizerextends AbstractOwnableSynchronizerimplements java.io.Serializable {AbstractQueuedSynchronizer 是用来实现锁或者其他同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架及整个JUC体…

60 个深度学习教程:包含论文、实现和注释 | 开源日报 No.202

labmlai/annotated_deep_learning_paper_implementations Stars: 44.0k License: MIT annotated_deep_learning_paper_implementations 是一个包含深度学习论文的 60 个实现/教程&#xff0c;附带并排注释&#xff1b;包括 transformers&#xff08;原始、xl、switch、feedbac…

区块链推广海外市场怎么做,CloudNEO服务商免费为您定制个性化营销方案

随着区块链技术的不断发展和应用场景的扩大&#xff0c;区块链项目希望能够进入海外市场并取得成功已成为越来越多公司的目标之一。然而&#xff0c;要在海外市场推广区块链项目&#xff0c;需要采取有效的营销策略和措施。作为您的区块链项目营销服务商&#xff0c;CloudNEO将…

超详细——VsCode连接远程主机/虚拟机并设置免密登录

超详细——VsCode连接远程主机/虚拟机并设置免密登录 文章目录 超详细——VsCode连接远程主机/虚拟机并设置免密登录[toc]连接到远程主机/虚拟机步骤1、打开vscode拓展 搜索 remote-ssh并安装步骤2、打开远程主机/虚拟机的ssh服务步骤3、设置连接远程主机的配置文件 设置免密登…

网络爬虫丨基于scrapy+mysql爬取博客信息

文章目录 写在前面实验描述实验框架实验需求 实验内容1.安装依赖库2.创建Scrapy项目3.配置系统设置4.配置管道文件5.连接数据库6.分析要爬取的内容7.编写爬虫文件 运行结果写在后面 写在前面 本期内容&#xff1a;基于scrapymysql爬取博客信息并保存到数据库中 实验需求 ana…

欧科云链做客Google Cloud与WhalerDAO专题论坛,畅谈Web3数据机遇

3月10日&#xff0c;由Google Cloud、WhalerDAO和baidao data主办&#xff0c;以Web3AI 2024 DATA POWER为主题的分享会在北京中关村举行。欧科云链高级研究员Jason Jiang受邀参加活动&#xff0c;带来“从链上数据发掘Web3时代的无限机遇”的主题分享。 Web3.0核心要素始终是链…

波奇学Linux:信号量环形队列,原生线程池,封装线程

基于信号量的多生产多消费环形队列 代码 const static int defaultcap5;template<class T> class RingQueue { private:void P(sem_t &sem){sem_wait(&sem); //资源-1}void V(sem_t &sem){sem_post(&sem); //资源加一}void Lock(pthread_mutex_t &…

c++实现简单搜索二叉树<K,V>形

文章目录 搜索二叉树节点类BSTreeNode(节点类的构造) BSTree(功能实现类)Insert(插入)Erase(删除)Find(查找这个节点) 搜索二叉树 搜索二叉树本质:左节点比我小 右节点比我大 节点类 BSTreeNode:给自身节点封装一个类 用这个类来添加节点的操作 我们写的是一个key.value型的搜…

【现代C++】移动语义和右值引用

现代C++中的移动语义和右值引用是C++11引入的重要特性,旨在优化资源管理和提升性能。这些特性允许资源的转移而非复制,特别是对于临时对象和大型对象。 1. 右值引用 右值引用是对临时对象的引用,它允许你修改临时对象。使用&&来声明右值引用。 #include <iost…

【电路笔记】-MOSFET作为开关

MOSFET 作为开关 文章目录 MOSFET 作为开关1、概述2、MOSFET特性曲线2.1 截住区域2.2 饱和区域3、MOSFET作为开关的示例4、功率MOSFET电机控制5、P沟道MOSFET作为开关6、互补MOSFET作为开关电机控制器当 MOSFET 在截止区和饱和区之间工作时,MOSFET 是非常好的电子开关,用于控…

wsl ubuntu 安装的正确方式

目录 wsl ubuntu 安装的正确方式&#xff1a; 将wsl2设置为默认版本&#xff1a; 1、打开powershell 2、设置wsl的版本为2 ​编辑 3、更新wsl程序 4、强制关闭子系统 5、查看wsl支持的列表 6、安装指定版本的系统 wsl ubuntu 安装的正确方式&#xff1a; 此时&#xff0c…

一体成型PFA尖头镊子高纯特氟龙材质镊子适用半导体新材料

PFA镊子用于夹取小型片状、薄状、块状样品&#xff0c;广泛应用在半导体、新材料、新能源、原子能、石油化工、无线电、电力机械等行业。 具有耐高低温性&#xff08;可使用温度-200℃&#xff5e;&#xff0b;260℃&#xff09;、耐腐蚀、表面不粘性等特点&#xff0c;用于苛…

基于Springboot+Redis+mysql实现的闲置二手交易网站管理系统

1.1 背景分析 二手商品是学生比较青睐的廉价商品&#xff0c;网站设计应着重突出实用和廉价。也有一部分消费者是淘宝者&#xff0c;他们对相中的商品有着急切的拥有欲望。网上交易的好学生提供一个供需平台&#xff0c;学生可以将自己不用的东西放在网上&#xff0c;也可在网…

解决quest2激活后更新卡0%(内附全套工具)

注意:顺序很重要,一定是要先开移动热点,再开Netch 下载工具包https://wwi.lanzoup.com/iXaX61rou8hi ,密码在下方 解压后,先安装这个 开启移动热点网络名称和密码随便写下就行 开启后会有个 本地连接 开启Netch添加VLESS 服务器 然后点击启动,启动后 会有一个 aioClou…

设计模式 --3:装扮模式

结构图 代码 #include<iostream>using namespace std;class person { public:person() {};person(string name) { this->name name; }virtual void show() {cout << "装扮的:" << this->name << endl;} private:string name; }; //装…

活动图高阶讲解-05

115 00:06:30,540 --> 00:06:39,060 那我们可以把它和 116 00:06:39,060 --> 00:06:41,260 序列图对比一下 117 00:06:41,260 --> 00:06:41,740 你看 118 00:06:41,740 --> 00:06:42,660 序列图上 119 00:06:42,660 --> 00:06:47,500 同样的一个过程 120 0…

Python之Web开发中级教程----ubuntu中下载安装Postman

Python之Web开发中级教程----ubuntu中下载安装Postman PostMan 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件&#xff0c;可以直接去对我们写出来的路由和视图函数进行调试&#xff0c;作为后端程序员是必须要知道的一个工具。 查看ubuntu系统中是否已经安装了…