【笔记】【矩阵的二分】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.rhkb.cn/news/356915.html

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

相关文章

设计模式——设计模式原则

设计模式 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 设计模式原则 单一职责原则&#xff08;SPS&#xff09;&#xff1a; 又称单一功能原则&#xff0c;面向对象五个基本原则&#xff08;SOLID&#xff09;之一 原则定义&#xf…

设计模式1-简介

设计模式简介 专栏的目的什么是设计模式设计模式要学什么软件开发原则主流设计模式 学习建议经典面试题 资源 专栏的目的 1.理解松耦合的设计思想 2.掌握面向对象设计原则 3.掌握重构技法改善设计 4.掌握GOF核心设计模式 什么是设计模式 每一个模式描述了一个在我们周围不…

【自动驾驶】运动底盘状态数据:里程计、IMU、运动学分析、串口通信协议

文章目录 控制器与运动底盘状态数据:里程计、IMU运动学分析与轮子运动学分析公式串口通信控制与反馈通讯协议串口通信反馈上行数据帧解析串口通信控制下行数据帧解析代码实现IMU、里程计数据的获取、解析、计算控制器与运动底盘状态数据:里程计、IMU 控制器需要负责外发底盘…

mysql--安装跳过验证修改密码安全加固

安装mysql 配置mysql的yum源 [rootVM-0-14-rockylinux ~]# tee /etc/yum.repos.d/mysql.repo << EOF > [MYSQL] > namemysql > baseurlhttps://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64 > gpgcheck0 > EOF yum安装mysq…

11、鸿蒙学习—UDID获取方法

一、手机的UDID获取方法如下&#xff1a; 1、打开“设置 > 关于手机”&#xff0c;多次点击版本号&#xff0c;打开开发者模式。 2、打开“设置 > 系统和更新”&#xff0c;在最下方找到“开发人员选项”&#xff0c;打开“USB调试”开关。 3、使用PC连接手机后&#…

Git简单使用和理解

workspace: 本地的工作目录。 index/stage&#xff1a;暂存区域&#xff0c;临时保存本地改动。 local repository: 本地仓库&#xff0c;只想最后一次提交HEAD。 remote repository&#xff1a;远程仓库。 对于Git,首先应该明白第一git是一种分布式版本控制系统&#xff0c;最…

使用ESP32和Flask框架实现温湿度数据监测系统

项目概述 在这个项目中&#xff0c;我们将使用ESP32微控制器读取温湿度传感器的数据&#xff0c;并将这些数据通过HTTP请求传输到基于Flask框架的服务器。Flask是一个轻量级的Python Web框架&#xff0c;非常适合快速开发和部署Web应用。通过这个项目&#xff0c;我们不仅可以了…

非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载百度网盘

redis下载安装以及基本使用 下载地址 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;0410 一个名对应一个数值 内存级 在内存里进行操作 准备启动 我们现在就有一个redis客户端的服务器了 我们再启动一个cmd 操作redis数据库 redis里面的基本数据类型有五种 …

2024年7月JLPT日语N1真题试卷和答案解析,《Navi日语社》小程序在线答题考试,你的专属考试助手,日语学习神器!

掌握日语&#xff0c;从日语社小程序开始。这款小程序专为日语学习者设计&#xff0c;提供全面的JLPT备考资源&#xff0c;包括日语N1至N5等级考试的历年真题和2024年最新题目。无论你是日语新手还是备考高手&#xff0c;都能在这里找到适合自己的学习路径。 核心功能&#xf…

用VPS部署聊天机器人有哪些优势?

VPS足以帮助您将人工智能 (AI) 的功能无缝融入聊天机器人并增强客户支持。聊天机器人已迅速成为改善用户体验的首选解决方案&#xff0c;因为它们全天候在线且可编程回答各种问题。 聊天机器人在客户支持方面的作用不容置疑。但所有出色的解决方案都需要出色的网络托管。 VPS…

【D3.js in Action 3 精译】关于本书

文章目录 本书读者本书结构与路线图本书代码liveBook 在线论坛 D3.js 项目的传统开发步骤 本书读者 这本书适用于所有渴望在数据可视化工作中获得完全创意自由的人&#xff0c;从定制化的经典图表到创建独特的数据可视化布局&#xff0c;涵盖内容广泛&#xff0c;应有尽有。您…

银河麒麟V10 SP1.1操作系统 离线安装 nginx1.21.5、redis 服务

银河麒麟官网地址&#xff1a;国产操作系统、麒麟操作系统——麒麟软件官方网站 一、查看系统版本 命令&#xff1a;nkvers 我的是 release V10 (SP1)&#xff0c;根据这个版本去官网找对应的rpm包 银河麒麟操作系统的rpm包必须从官方找&#xff0c; 要是随便找个Centos的rp…

跌倒识别:守护公共安全的AI技术应用场景-免费API调用

随着科技的不断进步&#xff0c;人工智能在各个领域的应用日益广泛&#xff0c;其中在公共安全领域&#xff0c;智能跌倒识别系统正逐渐成为守护人们安全的重要工具。本文将分享智能跌倒识别系统在不同场景下的应用及其重要性。 产品在线体验地址-API调用或本地化部署 AI算法模…

机器学习课程复习——逻辑回归

1. 激活函数 Q:激活函数有哪些? SigmoidS型函数Tanh 双曲正切函数

U-Net for Image Segmentation

1.Unet for Image Segmentation 笔记来源&#xff1a;使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割) 1.1 DoubleConv (Conv2dBatchNorm2dReLU) import torch import torch.nn as nn import torch.nn.functional as F# nn.Sequential 按照类定义的顺序去执行模型&…

echarts Y轴展示时间片段,series data数据 也是时间片段,鼠标放上去 提示框显示对应的时间片段

功能要求 1、折线图&#xff0c;展示每天对应的一个时间片段 2、echarts Y轴展示时间片段&#xff0c;如&#xff1a;[00:00,03:00,05:15] 3、X轴展示日期&#xff0c;如&#xff1a;[xx年xx月xx日] 后端返回的数据结构&#xff0c;如 [{xAdate:"2024-06-15",data:…

【Spine学习14】之 裁剪

1、新建裁剪 2、在页面中随便点几下 圈出对应位置 3、点编辑裁剪 或者按空格键 退出编辑模式&#xff0c; 页面就只剩下对应区域&#xff0c;这个区域可以任意拖动 放大缩小显示。 tips&#xff1a; 如果手动选择区域描绘不准确&#xff0c;可以启用对应图片的网格 然后复制…

高性能并行计算华为云实验一:MPI矩阵运算

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建矩阵乘法源码 3.1.1 实验说明 3.1.2 实验步骤 3.2 创建卷积和池化操作源码 3.2.1 实验说明 3.2.2 实验步骤 3.3 创建Makefile文件并完成编译 3.4 建立主机配置文件与运行监测 四、实验结果与分析 4.1 矩阵乘法…

C++Muduo网络库初探

Muduo初探 Muduo网络库简介 Muduo是由【陈硕】大佬个人开发的TCP网络编程库&#xff0c;基于Reactor模式&#xff0c;提供了高效的事件驱动网络编程框架&#xff0c;有助于快速搭建高性能的网络服务端。 什么是Reactor模式&#xff1f; I/O多路复用 在网络I/O中&#xff0…

Word页码设置,封面无页码,目录摘要阿拉伯数字I,II,III页码,正文开始123为页码

一、背景 使用Word写项目书或论文时&#xff0c;需要正确插入页码&#xff0c;比如封面无页码&#xff0c;目录摘要阿拉伯数字I&#xff0c;II&#xff0c;III为页码&#xff0c;正文开始以123为页码&#xff0c;下面介绍具体实施方法。 所用Word版本&#xff1a;2021 二、W…