【力扣】1337.矩阵中战斗力最弱的k行

2023-10-26

给你一个大小为 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

 代码:

class Solution {
    public int[] kWeakestRows(int[][] mat, int k) {

        TreeMap<Integer, Integer> map = new TreeMap<>();//有序集合
        for (int i = 0; i < mat.length; i++) {
            int key = i;
            for (int j = 0; j < mat[i].length; j++) {
                if (mat[i][j] == 0) {
                    break;
                }
                key += mat[i][j] * 100;  //200,401,102,203,504
            }
            map.put(key, i);
        }
        int[] arr = new int[k];
        int index = 0;
        for (Integer key1 : map.keySet()) {//map.keySet()返回map中的key值
            //表示将map对象的所有key值已set集合的形式返回,因为map也是无序的,且key值也是不可重复的,因此这里用set集合存储key并返回也符合规则。
            if (index == k) break;//循环结束的条件
            arr[index++] = map.get(key1);//通过key值获取map中的value,存储到arr数组中
        }
        return arr;
    }

    public static void main(String[] args) {
        Solution s = new Solution();
        int[][] arr = new int[][]{{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}};
        System.out.println(Arrays.toString(s.kWeakestRows(arr, 3)));
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【力扣】1337.矩阵中战斗力最弱的k行 的相关文章

随机推荐

  • 第七章——数据挖掘(1)

    一 数据挖掘的概述 1 数据挖掘概念与发展 随着科学技术的飞速发展 使得各个领域或组织机构积累了大量数据 如何从这些数据中提取有用的信息和知识以帮助做出明智决策成为巨大的挑战 计算机技术的迅速发展使得处理并分析这些数据成为可能 这种技术就是
  • 一个简易的区块链demo

    别人写的python版本 python版本源码地址 https github com dvf blockchain installation 环境准备 我使用的是ubuntu 16 04 其它linux版本也可以 需要安装python3 6
  • Android10(Q)系统启动概述

    Android10系统启动概述 一 init进程启动 二 zygote进程启动 三 SystemServer进程启动 四 AMS服务启动 首先用一张图看一下整体的启动流程 因为android系统底层是基于Linux Kernel 所以当Ke
  • LLVM编译流程详解

    LLVM 什么是LLVM LLVM项目是一系列分模块 可重用的编译工具链 它提供了一种代码编写良好的中间表示 IR 可以作为多种语言的后端 还可以提供与变成语言无关的优化和针对多种cpu的代码生成功能 传统编译器分为三个阶段 前端 gt 优
  • 下个版本已定!C++自救新动作!

    自去年年底 美国安全局 NSA 在其所发布的 Software Memory Safety 报告中点名批评C 之后 C 之父Bjarne Stroustrup一顿回怼后 做出决定 内部自救 现在 就让我们看看下一个版本的C 究竟有哪些大动作
  • Jetlinks物联网平台部署

    前端部署 用git拉取前端代码 git clone https github com jetlinks jetlinks ui antd git 使用yarn打包推荐 命令在项目根目录下执行 yarn install yarn run bu
  • 8:操作模式3-interrupt mode

    1 前言 eMMC总线操作包含 boot mode device identification mode interrupt mode data transfer mode 本文主要描述interrupt mode interrupt mo
  • 第一个JDBC程序

    JDBC 1 数据库驱动 例如 声卡 显卡 驱动等 2 JDBC SUN公司为了简化开发人员的 对数据库的统一 操作 提供了一个 Java操作数据库的 规范 俗称JDBC这些规范的实现由具体的厂商去做 对于开发人员来说 我们只需要掌握JDB
  • 【线性代数】逆矩阵的求解过程

    一 方阵的行列式 二 逆矩阵 2 1 使用Numpy 求例2的逆矩阵 import numpy as np A np mat 1 2 3 2 2 1 3 4 3 print 计算A行列式的值 print np linalg det A pr
  • Boost升压电路学习框架

    此文为个人学习框架 如有错误请大家指点 目录 一 Boost电路是什么 二 为什么要用Boost电路 1 还有什么升压电路 其区别是什么 三 Boost电路的模式 1 Boost开环电路 1 1Boost开环电路是什么 1 2Boost开环
  • 软考-软件设计师-数据库1-体系结构-模型-关系代数-规范化

    1 数据库技术基础 2 基本概念 数据库系统DBS 是一个采用了数据库技术 有组织地 动态地存储大量有关数据 方便多用户访问的计算机系统 其由下面四个部分组成 数据库 统一管理 长期存储在计算机内的 有组织的相关数据的集合 硬件 构成计算机
  • Java文件上传【通用】

    Java文件上传 主要是针对于网页来说 一般是通过input的file类型上传文件流到后台 再通过后台处理将文件移动到指定位置达到上传的目的 这里贴代码时 主要是以springboot框架为例 但是是通用的 1 表单提交上传
  • django从1.7升级到1.9后 提示:RemovedInDjango110Warning

    Django项目 把django从1 7升级到1 9后 大量报错 需要做如下修改 1 修改urls py 在django1 9里 urls的配置不再支持字符串型的路由 需要先import 然后直接引用 更加清晰 比如 urlpatterns
  • elk笔记5.2--logstash使用

    elk笔记5 2 logstash使用 1 介绍 2 使用案例 2 1 通过type隔离多个索引 2 2 通过pipeline隔离多个索引 3 注意事项 4 说明 1 介绍 logstash 资源充足的情况下 每个logstash示例采集
  • PromQL的简单使用

    PromQL的简单使用 一 背景 二 PromQL的数据类型 三 字面量 1 字符串字面量 2 浮点数字面量 四 时间序列选择器 1 即时向量选择器 1 组成部分 2 指标名称和匹配器的组合 3 匹配器 2 区间向量选择器 1 时间格式 3
  • 流媒体压力测试工具—推拉流

    目录 前言 介绍 St load 安装篇 推流篇 拉流篇 前言 流媒体压力测试是评估流媒体系统性能和稳定性的重要环节 它可以模拟大量用户同时推送和拉取流媒体数据 以验证系统在高负载情况下的表现 为了进行流媒体压力测试 我们可以使用推拉流工具
  • DN值、辐射率、反射率等

    数字量化值 Digital Number DN 像素值的通用术语是数字量化值或DN值 它通常被用来描述还没有校准到具有意义单位的像素值 如果你只是想看一个图像 和不打算解释像素值的物理意义 那么就可以以DN值的方式来保存 辐射率 Radia
  • 极智AI

    欢迎关注我的公众号 极智视界 获取我的更多笔记分享 大家好 我是极智视界 本文讲解一下 C 手写 softmax 激活函数 在多分类任务中 最后通常使用 softmax 函数作为网络输出层的激活函数 softmax 函数可以对输出值作归一化
  • 互联网络安全、信息安全、计算机网络安全、信息保障有什么区别?

    据CNBC报道 由于黑客 安全漏洞和恶意软件攻击继续成为行业媒体报道的头条新闻 网络犯罪已成为一种全球 流行病 去年对全球组织和人员造成的损失约6000亿美元 因此 打击此类活动已成为一项有利可图且有益的事业 这并不奇怪 所以 如果你正在考
  • 【力扣】1337.矩阵中战斗力最弱的k行

    给你一个大小为 m n 的矩阵 mat 矩阵由若干军人和平民组成 分别用 1 和 0 表示 请你返回矩阵中战斗力最弱的 k 行的索引 按从最弱到最强排序 如果第 i 行的军人数量少于第 j 行 或者两行军人数量相同但 i 小于 j 那么我们