LeetCode 5071. 找出所有行中最小公共元素(Java)
给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了。请你帮忙找出在所有这些行中 最小的公共元素。
如果矩阵中没有这样的公共元素,就请返回 -1。
示例:
输入:mat = [[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9]]
输出:5
提示:
1 <= mat.length, mat[i].length <= 5001 <= mat[i][j] <= 10^4mat[i]已按递增顺序排列。
题解
感觉这题比第二题简单多了。不明白为什么要分数一样。
定义一个一维数组表示每行可能是最小公共元素的列下标。然后比较每行的列下标所指的数的是否相等,如果全都相等,说明它就是最小公共元素。
那下标的改变是靠什么呢?
pos[j] 表示第 j 行的当前下标。
如果指向的数比第 0 行的当前数小,那么它就要加 1,即向后移动。
如果大于,那么说明第 j 行不存在和第 0 行第 i 个数相等的数。即第 i 个数不是最小公共元素。
如果相等就检查下一行。直到所有行都满足条件。
时间复杂度: 双层循环 O(n2)O(n^{2})O(n2)
空间复杂度: 一维数组和 mat 的行数有关,O(n)O(n)O(n)
Java
class Solution {
public int smallestCommonElement(int[][] mat) {
int m = mat.length;
int n = mat[0].length;
int[] pos = new int[m];// 保存每行的可能的最小公共元素的列下标
// 遍历第0行的n个数
for (int i = 0; i < n; ++i) {
boolean flag = true;// 第0行的第i个数(简:数x)是最小的公共元素
// 遍历第1~n行,检查第0行的第i个数是否在第j行中
for (int j = 1; j < m; ++j) {
// 第j行的数小,那么下标pos[j]后移
while (mat[j][pos[j]] < mat[0][i]) {
if (++pos[j] >= n) {// 第j行已经遍历完,都不存在数x
return -1;// 直接返回未找到,即-1
}
}
// 第j行的第pos[j]个数大于数x,那么数x不满足条件
if (mat[j][pos[j]] > mat[0][i]) {
flag = false;// 设为不是
break;// 退出
}
}
if (flag == true) {
return mat[0][i];// 是最小公共元素,返回它
}
}
return -1;// 没找到
}
}
LeetCode 5071. 找出所有行中最小公共元素(Java)的更多相关文章
- leetcode 双周赛9 找出所有行中最小公共元素
给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了.请你帮忙找出在所有这些行中 最小的公共元素. 如果矩阵中没有这样的公共元素,就请返回 -1. 示例: 输入:mat = [[,,,,] ...
- 找出数字数组中最大的元素(使用Math.max函数)
从汤姆大叔的博客里看到了6个基础题目:本篇是第1题 - 找出数字数组中最大的元素(使用Match.max函数) 从要求上来看,不能将数组sort.不能遍历.只能使用Math.max,所以只能从java ...
- 寻找两个数组中的公共元素Java程序代码
package lianxi; import java.util.*; public class UnionSearch { public static void main(String[] args ...
- 找出一堆数中最小的前K个数
描写叙述: 给定一个整数数组.让你从该数组中找出最小的K个数 思路: 最简洁粗暴的方法就是将该数组进行排序,然后取最前面的K个数就可以. 可是,本题要求的仅仅是求出最小的k个数就可以,用排序能够但显然 ...
- 【LeetCode】找出所有数组中消失的数字
[问题] 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次.找到所有在 [1, n] 范围之间没有出现在数组中的数字. ...
- python -- 对list去重并找出列表list中的重复元素
一.一个列表中可能含有重复元素,使用set()可以实现列表的去重处理,但是无法知道哪些元素是重复的,下面的函数用于找出哪些元素重复了,以及重复的次数. 代码: from collections imp ...
- 找出N个数中最小的k个数问题(复杂度O(N*logk))
这是一个经典的算法题,下面给出的算法都在给定的数组基础上进行,好处时不用分配新的空间,坏处是会破坏原有的数组,可以自己分配新的空间以避免对原有数组的破坏. 思路一 先直接排序,再取排序后数据的前k个数 ...
- 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
int [][]a={{3,2,6},{6,8,2,10},{5},{12,3,23}}; //先对二维数组进行遍历:然后把二维数组合成一个数组 int[] k=new int[11]; int q= ...
- 15.找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
package com.bao; public class Erweim { public static void main(String[] args) { int[][]a={{3,2,6},{6 ...
随机推荐
- 新blog
www.nancheng58.xyz 欢迎来访 骗访客量 我之前的blog是在csdn上的 https://blog.csdn.net/sinat_34550050 这里算是个在csdn的镜像吧 不过 ...
- GoCN每日新闻(2019-11-01)
GoCN每日新闻(2019-11-01) GoCN每日新闻(2019-11-01) 1. Rob Pike 认为 Go 成功的 5 个因素 https://changelog.com/posts/5- ...
- Linux禁止ping和开启ping的方法
Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 一.通过修改 ...
- npx 使用教程
转自阮一峰http://www.ruanyifeng.com/blog/2019/02/npx.html npm 从5.2版开始,增加了 npx 命令.它有很多用处,本文介绍该命令的主要使用场景. N ...
- html内获取当前文件路径,页面获取当前路径
function getRealPath(){ var curWwwPath = window.document.location.href; var pathName = window.docume ...
- springboot框架在容器加载完成之后执行某个方法
问题描述: 想在websocket实现的Handler中执行一些初始化操作,但是初始化操作使用到了@Autowired自动注入的变量,而且是保护类型.第一个想法是放到Handler构造函数中执行,但是 ...
- 剑指offer:数据流中的中位数
题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值.我 ...
- 一句命令激活windows/office (https://03k.org/kms.html)
https://03k.org/kms.html 本站上线KMS服务~一句命令激活windows/office kissshot2015年11月1日 装机必备, 软件下载 240 条评论 服务器地址: ...
- Python数据分析学习(一)
转摘:https://segmentfault.com/a/1190000015440560 一.数据初探 首先导入要使用的科学计算包numpy,pandas,可视化matplotlib,seabor ...
- SpringBoot项目中普通类获取http相关的类(request/response/session)
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import ...