【笔记】【矩阵的二分】668. 乘法表中第k小的数

力扣链接:题目
参考地址:参考

思路:二分查找
把矩阵想象成一维的已排好序的数组,用二分法找第k小的数字。
在这里插入图片描述
假设m行n列,则对应一维下标范围是从1到mn,初始:
l=1; r=m
n; mid=(l+r)/2
设mid在第i行,第j列,即mid对应的值为matrix[i][j],
注意:由于乘法表中的元素并不是线性排序的,所以不能直接用mid和k比较,这样找不出第k小具体在矩阵的哪个位置,mid并不一定在矩阵中心,所以需要每次统计mid位置实际在矩阵中有多少比他小的数。

(1)由矩阵可知,0~i-1行必然比matrix[i][j]小,假设mid是matrix[1][1],比它小的值的数量为count, 初始count=0;
即,count += 0~i-1行的值的数量 , 即mid/列数 * 列数,mid/列数得到mid所在行号
在这里插入图片描述
(2)此外,下面的k=i~m-1行也存在比matrix[i][j]小/等于的数:第k行(mid/k)列左边的值必然比matrix[i][j]小
——因为matrix[i][j]=i * j, j=mid/i, matrix[k][mid/k] = matrix[i][mid/i] = matrix[i][j],
而左边列数<mid/k, 所以(左边的值=k*左边列数) < (matrix[k][mid/k]=k * mid/k)= matrix[i][j]
即,count += mid/k, k=i~m-1
在这里插入图片描述
(3)综上,<=mid对应的矩阵值的数量为:

	// 当前行之上的行肯定比mid所指值小,统计比mid所指值小的个数count += mid/n * n;   // 行数*每行有多少个// 当前行及之下的行也有比mid所指值小的值,也要统计for(int i=mid/n+1; i<=m; i++){  // mid/n+1是当前行// 当前行有mid/i个数比mid对应的值小count += mid/i;}

或者:

	for (int i = 1; i <= m; i++) {count += Math.min(x / i, n);}

总体代码如下:

class Solution {public int findKthNumber(int m, int n, int k) {int l=1, r=m*n;// m行n列,当前行idx:mid/n+mid%n,矩阵nums[][]while(l<=r){int mid = (l+r)/2;int count = 0;// 当前行之上的行肯定比mid所指值小,统计比mid所指值小的个数count += mid/n * n;   // 行数*每行有多少个// 当前行及之下的行也有比mid所指值小的值,也要统计for(int i=mid/n+1; i<=m; i++){  // mid/n+1是当前行// 当前行有mid/i个数比mid对应的值小count += mid/i;}if(count<k){l = mid + 1;}else{r = mid - 1;}}return l;}
}

二分法为什么输出的数一定在乘法表里?
https://leetcode.cn/problems/kth-smallest-number-in-multiplication-table/solutions/891712/guan-fang-ti-jie-yu-zi-ji-de-yi-wen-java-nxu8

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

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

相关文章

vs显示空格

显示空格 Visual Studio 2022 支持显示空白字符的功能。可以通过以下步骤来启用这个功能&#xff1a; 在菜单栏中选择 编辑(Edit)。然后选择 高级(Advanced)。最后选择 查看空白(View White Space)。此外&#xff0c;您还可以使用快捷键 Ctrl R, Ctrl W 来切换显示或隐藏空…

在ie edge 浏览器中,uni-easyinput 组件类型为password时,出现两个小眼睛图标

问题描述&#xff1a; 在ie edge 浏览器中&#xff0c;uni-easyinput 组件类型为password时&#xff0c;出现两个小眼睛图标&#xff0c;此为官方组件已存在的bug 解决思路&#xff1a; 在/uni_modules/uni-easyinput/components/uni-easyinput.vue组件中样式中增加以下代码 …

**args和**kwargs是什么?

**args和 **kwargs是什么&#xff1f; **kwargs 是一个惯用的命名&#xff0c;指代一个字典&#xff08;dictionary&#xff09;&#xff0c;其中包含了所有未在函数定义中明确指定的关键字参数。在 Python 中&#xff0c;函数的参数可以分为两类&#xff1a;位置参数&#xf…

新兴互联网银行搭档Apache SeaTunnel构建数据流通管道!

当新兴互联网银行乘着数字化改革的风潮搭档数据集成平台Apache SeaTunnel&#xff0c;成千万上亿的数据就有了快速流通的管道。6月26日14:00&#xff0c;Apache SeaTunnel社区将带上企业最佳实践与观众见面&#xff0c;与大家面对面交流最新的企业实践部署经验。锁定SeaTunnel视…

[spring] Spring MVC Thymeleaf(上)

[spring] Spring MVC & Thymeleaf&#xff08;上&#xff09; 本章内容主要过一下简单的 Spring MVC 的案例 简单来说&#xff0c;spring mvc 就是比较传统的网页开发流程&#xff0c;目前 boot 是可以比较轻松的配置 thymeleaf——毕竟 spring boot 内置对 thymeleaf 的…

HTML(6)——表单

目录 input标签基本使用 input标签占位 单选框radio 上传文件file 下拉菜单 文本域 label标签 按钮 input标签基本使用 input标签type属性值不同&#xff0c;则功能不同 <input type"..."> type属性值说明text文本框&#xff0c;用于输入单行文本p…

未授权访问漏洞总结

以下总结了常见的未授权访问漏洞&#xff0c;还在持续更新中&#xff0c;遇到就会补充。欢迎大家关注~ 目录 FTP未授权访问&#xff08;21&#xff09; 漏洞原理 漏洞检测 漏洞利用 漏洞修复 LDAP未授权访问&#xff08;389&#xff09; 漏洞原理 漏洞检测 漏洞利用 …

微信小程序---支付

一、判断是否登录 如果没有登录&#xff0c;走前端登录流程&#xff0c;不再赘述 二、获取订单编号 跟自己的后端商议入参&#xff0c;然后获取订单编号 三、通过订单编号获取wx.requestPayment()需要的参数 获取订单编号再次请求后端接口&#xff0c;拿到wx.requestPayme…

Mongodb介绍及window环境安装

本文主要内容为nosql数据库-MongoDB介绍及window环境安装。 目录 什么是MongoDB&#xff1f; 主要特点 MongoDB 与Mysql对应 安装MongoDB 下载MongoDB 自定义安装 创建目录 配置环境变量 配置MongoDB服务 服务改为手动 启动与关闭 安装MongoDB Shell 下载安装包 …

触发器结构

1.修改分隔符符号 delimiter$$ 可以修改成$$//都可以 2.创建触发器函数名称 create trigger函数名 3.什么样的操作触发&#xff0c;操作哪个表 after:...之后触发 before:...之前触发 insert:...插入被触发 update:...修改被触发 delete:...删除被触发 on 表名 实例…

介绍一下VueUse中useAsyncState的实现原理

useAsyncState 是 VueUse 库中提供的一个实用工具&#xff0c;它用于处理异步状态。这个 Hook 允许你在 Vue 组件中以同步的方式处理异步操作的状态&#xff0c;比如加载、加载中、错误等。 useAsyncState 的实现原理通常涉及以下几个核心概念&#xff1a; 响应式系统&#xf…

三:SpringBoot的helloworld和使用Springboot的优点以及快速创建Springboot应用

三&#xff1a;SpringBoot的helloworld和使用Springboot的优点以及快速创建Springboot应用 一&#xff1a;HelloWorld [我们创建的是maven项目或者直接创建一个Spring] 1.1&#xff1a;创建一个maven 项目&#xff08;1】&#xff1a;需要自己手动写一个SpringBoot 的启动类同…

Python自动化办公篇—pandas操作Excel:读取+查看+选择+清洗+排序+筛选+函数+写入

目录 专栏导读库的介绍库的安装1、读取数据2、查看数据3、选择数据4、数据清洗5、数据排序6、数据筛选7、数据操作8、数据写入总结 专栏导读 文章名称链接Python自动化办公—pyautogui图像定位\点击功能,实现自动截取当前屏幕并检索点击(可制作为游戏点击脚本)点我进行跳转Pyt…

为什么网上这么多破解 Intellij IDEA 的工具,但是官方却不管呢?

大家好&#xff0c;我是小2&#xff0c;一个程序员~ 程序员小2 每天一篇技术重磅好文&#xff0c;涉及一线互联网大厂应用架构&#xff08;高可用、高性能、高稳定&#xff09;&#xff0c;AI、大数据、java架构等热门领域。 112篇原创内容 公众号 来源&#xff1a;Java知音…

基于Spring Boot+VUE旅游管理系统

1管理员功能模块 管理员通过点击后台管理&#xff0c;进入页面可以输入用户名、密码、角色进行登录相对应操作&#xff0c;如图1所示。 图1管理员登录界面 管理员通过点击后台管理&#xff0c;进入页面可以填写首页、个人中心、用户管理、旅游方案管理、旅游购买管理、系统管…

python web框架哪家强?Flask、Django、FastAPI对比

前言 当你掌握了python的基础知识&#xff0c;并且会用和HTML和CSS编写简单的静态网页。现在你只需再掌握一个python web框架的知识&#xff0c;就可以开始编写一个动态的网站了。目前市面比较流程的python web框架有三个flask、Django、FastAPI。接下来我们对比一下。他们三个…

bwip-js-条码生成-常见条码类型-常用参数设置

文章目录 1.常用参数设置2.常见条码类型3.常见参数4.总结1.常用参数设置 生成svg代码。 var BWIPJS = require(bwip-js);let svg = BWIPJS.toSVG({bcid: code128, // 条形码类型text: 123456789, // 显示文本scale: 1, // 放大系数width: 20, …

sherpa-onnx说话人识别+语音识别自动开启(VAD)+语音识别Python API

专栏总目录 获取该开源项目的渠道,是我在b站上,看到了由csukuangfj制作的一套语音识别视频。以下地址均为csukuangfj在视频中提供,感谢分享! 新一代 Kaldi: 说话人识别+VAD+语音识别之 Python API_哔哩哔哩_bilibili 开源项目地址:GitHub - k2-fsa/sherpa-onnx: Speech-t…

HarmonyOS NEXT 从不懂到 ToDo List 实例开发

本文将从一个前端开发者的角度出发&#xff0c;速通鸿蒙 Next 开发的方方面面&#xff0c;并最终开发一个 Todo List 小实例。 简介 首先&#xff0c;鸿蒙使用 ArkTS 作为原生开发语言。如果你熟悉 TypeScript 编程语言&#xff0c;那基本上可以无缝过渡&#xff0c;因为 Ark…

Linux常⽤服务器构建-samba

目录 1. 介绍 2. 安装 3. 配置 3.1 创建存放共享⽂件的路径 3.2 创建samba账户 4 重启samba 5. 访问共享⽂件 5.1 mac下访问⽅式 5.2 windows下访问⽅式 1. 介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的⼀个免费软件&#xff0c;能够完成在 windows 、 mac 操作系统…