前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >2021-08-13:给定一个每一行有序、每一列也有序,整体可

2021-08-13:给定一个每一行有序、每一列也有序,整体可

原创
作者头像
福大大架构师每日一题
修改于 2021-08-16 02:22:08
修改于 2021-08-16 02:22:08
3440
举报

2021-08-13:给定一个每一行有序、每一列也有序,整体可能无序的二维数组 ,在给定一个正数k,返回二维数组中,最小的第k个数。

福大大 答案2021-08-13:

二分法。

代码用golang编写。代码如下:

代码语言:txt
AI代码解释
复制
package main

import (
    "fmt"
    "math"
)

func main() {
    matrix := [][]int{{1, 2, 3}, {2, 3, 4}, {3, 4, 5}}
    ret := kthSmallest2(matrix, 8)
    fmt.Println(ret)
}

// 二分的方法
func kthSmallest2(matrix [][]int, k int) int {
    N := len(matrix)
    M := len(matrix[0])
    left := matrix[0][0]
    right := matrix[N-1][M-1]
    ans := 0
    for left <= right {
        mid := left + ((right - left) >> 1)
        // <=mid 有几个 <= mid 在矩阵中真实出现的数,谁最接近mid
        info := noMoreNum(matrix, mid)
        if info.num < k {
            left = mid + 1
        } else {
            ans = info.near
            right = mid - 1
        }
    }
    return ans
}

type Info struct {
    near int
    num  int
}

func NewInfo(n1 int, n2 int) *Info {
    ans := &Info{}
    ans.near = n1
    ans.num = n2
    return ans
}

func noMoreNum(matrix [][]int, value int) *Info {
    near := math.MinInt64
    num := 0
    N := len(matrix)
    M := len(matrix[0])
    row := 0
    col := M - 1
    for row < N && col >= 0 {
        if matrix[row][col] <= value {
            near = getMax(near, matrix[row][col])
            num += col + 1
            row++
        } else {
            col--
        }
    }
    return NewInfo(near, num)
}

func getMax(a int, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m
给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。
福大大架构师每日一题
2022/01/20
2360
2021-12-28:给定一个二维数组matrix,matrix[i][j] = k代
从(i,j)位置可以随意往右跳<=k步,或者从(i,j)位置可以随意往下跳<=k步,
福大大架构师每日一题
2021/12/28
2630
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
2021-10-26:给定一个数组arr,arri = j,表示第i号试题的难度为j。给定一个非负数M。想出一张卷子,对于任何相邻的两道题目,前一题的难度不能超过后一题的难度+M。返回所有可能的卷子种数。
福大大架构师每日一题
2021/10/26
2990
2021-06-15:返回一个二维数组中,子矩阵最大累加和。
根据昨天的每日一题计算出0 ~ 0行,0 ~ 1行,0 ~ 2行,……0~N行的子数组最大累加和。
福大大架构师每日一题
2021/06/15
5520
2021-06-15:返回一个二维数组中,子矩阵最大累加和。
2021-11-27:给定一个数组arr,长度为N,做出一个结构,
2021-11-27:给定一个数组arr,长度为N,做出一个结构,可以高效的做如下的查询:
福大大架构师每日一题
2021/11/27
2230
2022-01-21:完美矩形。 给你一个数组 rectangles ,其中
给你一个数组 rectangles ,其中 rectanglesi = xi, yi, ai, bi 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。
福大大架构师每日一题
2022/01/21
3450
2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。返回最大的异或结果。
2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。返回最大的异或结果。
福大大架构师每日一题
2021/08/05
8780
2020-11-15:手写代码:行有序、列也有序的二维数组中,找num...
2020-11-15:手写代码:行有序、列也有序的二维数组中,找num,找到返回true,否则false?
福大大架构师每日一题
2020/11/15
6740
2020-11-15:手写代码:行有序、列也有序的二维数组中,找num...
​2021-05-13:数组中所有数都异或起来的结果,叫做异或和。
2021-05-13:数组中所有数都异或起来的结果,叫做异或和。给定一个数组arr,返回arr的最大子数组异或和。
福大大架构师每日一题
2021/05/13
4180
​2021-05-13:数组中所有数都异或起来的结果,叫做异或和。
2021-05-06:给定一个二维数组matrix, 你可以从任何位置
2021-05-06:给定一个二维数组matrix, 你可以从任何位置出发,走向上下左右四个方向 。返回能走出来的最长的递增链长度。
福大大架构师每日一题
2021/05/06
5560
2021-05-06:给定一个二维数组matrix, 你可以从任何位置
2021-08-21:给定一个数组arr,长度为N > 1,从中间切一
2021-08-21:给定一个数组arr,长度为N > 1,从中间切一刀,保证左部分和右部分都有数字,一共有N-1种切法,如此多的切法中,每一种都有:绝对值(左部分最大值 – 右部分最大值)。返回最大的绝对值是多少?
福大大架构师每日一题
2021/08/21
2640
2021-08-21:给定一个数组arr,长度为N > 1,从中间切一
2021-07-10:请返回arr中,求子数组的累加和,是<=K
2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的。返回这个最大的累加和。
福大大架构师每日一题
2021/07/10
3900
2021-07-10:请返回arr中,求子数组的累加和,是<=K
LeetCode热题Top100 | 中等 | 上
1. 两数相加(2)# 给你两个非空的链表,表示两个非负的整数。 它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 示例 1: 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807. 示例 2: 输入:l1 = [0], l2 = [0] 输出:[0] 示例 3: 输入:l1 = [9,9,9,9,9,9
素履coder
2022/05/19
1.6K0
2021-10-11:二叉树中的最大路径和。路径 被定义为一条从
2021-10-11:二叉树中的最大路径和。路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。力扣124。
福大大架构师每日一题
2021/10/11
6470
2021-05-25:给定一个矩阵matrix,值有正、负、
2021-05-25:给定一个矩阵matrix,值有正、负、0,蛇可以空降到最左列的任何一个位置,初始增长值是0,蛇每一步可以选择右上、右、右下三个方向的任何一个前进,沿途的数字累加起来,作为增长值;但是蛇一旦增长值为负数,就会死去 。蛇有一种能力,可以使用一次:把某个格子里的数变成相反数,蛇可以走到任何格子的时候停止。返回蛇能获得的最大增长值。
福大大架构师每日一题
2021/05/25
3090
2021-05-25:给定一个矩阵matrix,值有正、负、
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数的最大差值。要求:时间复杂度O(N) 。
福大大架构师每日一题
2021/05/20
3390
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数
2021-07-15:接雨水 II。给你一个 m x n 的矩阵,其中的值
2021-07-15:接雨水 II。给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。
福大大架构师每日一题
2021/07/15
4240
2021-07-15:接雨水 II。给你一个 m x n 的矩阵,其中的值
二分查找总结
二分查找是在每次匹配后,将查找的空间一分为二的算法,二分查找应该是有序的数组进行查找.
Tim在路上
2020/08/04
4780
2021-07-31:给定数组father,大小为N,表示一共有N个节
2021-07-31:给定数组father,大小为N,表示一共有N个节点,fatheri = j 表示点i的父亲是点j, father表示的树一定是一棵树而不是森林,给定数组values,大小为N,valuesi=v表示节点i的权值是v。实现如下4个方法,保证4个方法都很快!1)让某个子树所有节点值加上v,入参:int head, int v;2)查询某个子树所有节点值的累加和,入参:int head;3)在树上从a到b的整条链上所有加上v,入参:int a, int b, int v;4)查询在树上从a到b的整条链上所有节点值的累加和,入参:int a, int b。
福大大架构师每日一题
2021/07/31
2520
2022-03-07:K 个关闭的灯泡。 N 个灯泡排成一行,编号从
N 个灯泡排成一行,编号从 1 到 N 。最初,所有灯泡都关闭。每天只打开一个灯泡,直到 N 天后所有灯泡都打开。
福大大架构师每日一题
2022/03/07
4930
推荐阅读
相关推荐
2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文