LeetCode 1198. 找出所有行中最小公共元素(二分/合并有序链表)
文章目录
- 1. 题目
- 2. 解题
- 2.1 按列遍历
- 2.2 二分查找
- 2.3 合并k个有序链表
1. 题目
给你一个矩阵 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 <= 500
1 <= mat[i][j] <= 10^4
mat[i] 已按递增顺序排列。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-smallest-common-element-in-all-rows
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 按列遍历
- 按列遍历,计数,最先达到行数的就是答案
class Solution {public:int smallestCommonElement(vector<vector<int>>& mat) {int m = mat.size(), n = mat[0].size();int count[10001] = {0};for(int j = 0, i; j < n; ++j){for(i = 0; i < m; ++i){if(++count[mat[i][j]] == m)return mat[i][j];}}return -1;}
};
180 ms 24.2 MB
2.2 二分查找
- 依次对第一行的每个元素在其他行进行二分查找,都找到了,就是答案
代码略
2.3 合并k个有序链表
类似的思想
class Solution {public:int smallestCommonElement(vector<vector<int>>& mat) {int m = mat.size(), n = mat[0].size(), i = 0, cur = mat[0][0], count = 1;vector<int> idx(m,0);//每行遍历到的位置while(1){i = (i+1)%m;//循环遍历每行while(idx[i] < n && mat[i][idx[i]] < cur)idx[i]++;//找curif(idx[i] >= n)//找完了,没找到return -1;else if(mat[i][idx[i]]==cur){ //找到了count++;idx[i]++;}else if(mat[i][idx[i]] > cur){ //没找到,那就以当前数,重新找cur = mat[i][idx[i]];count = 1;idx[i]++;}if(count == m)//出现m次的,返回return cur;}return -1;}
};
200 ms 24.4 MB
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1198. 找出所有行中最小公共元素(二分/合并有序链表)相关推荐
- LeetCode 2058. 找出临界点之间的最小和最大距离
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 链表中的 临界点 定义 ...
- 编写程序,从键盘输人 10个整数,之间以一个空格隔开,存放在一维数组中。找出值最大和最小的元素,第一行输出最大值及其所在的元素下标,之间以一个空格隔开;第二行输出最小值及其所在的元素下标,之间以一个空
题目:编写程序,从键盘输人 10个整数,之间以一个空格隔开,存放在一维数组中.找出值最大和最小的元素,第一行输出最大值及其所在的元素下标,之间以一个空格隔开;第二行输出最小值及其所在的元素下标,之间以 ...
- 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
package com.homework.zw; //解题思路:先遍历二维数组的所有元素,用这些元素组成新的一维数组.然后利用冒泡排序找出一维数组的最大元素和最小元素. public class wo ...
- 找出一堆数中最小的前K个数
描写叙述: 给定一个整数数组.让你从该数组中找出最小的K个数 思路: 最简洁粗暴的方法就是将该数组进行排序,然后取最前面的K个数就可以. 可是,本题要求的仅仅是求出最小的k个数就可以,用排序能够但显然 ...
- 找出无序数组中最小的k个数(top k问题)
2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...
- LeetCode 1379. 找出克隆二叉树中的相同节点(二叉树遍历)
1. 题目 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target. 其中,克隆树 cloned 是原始树 original ...
- LeetCode 2058. 找出临界点之间的最小和最大距离(链表)
文章目录 1. 题目 2. 解题 1. 题目 链表中的 临界点 定义为一个 局部极大值点 或 局部极小值点 . 如果当前节点的值 严格大于 前一个节点和后一个节点,那么这个节点就是一个 局部极大值点 ...
- LeetCode 1618. 找出适应屏幕的最大字号(二分查找)
文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 text.并能够在 宽为 w 高为 h 的屏幕上显示该文本. 字体数组中包含按升序排列的可用字号,您可以从该数组中选择任何字体大小. 您可 ...
- python列表操作——列表嵌套列表,找出嵌套列表中共同的元素
今天在项目中遇到了一个列表嵌套找出共同元素的问题,本来懒得造轮子,直接百度一波,查了一圈不是只有两个list就是使用Intersection这个函数,可能这个功能过于简单了没人写,我试着用Inters ...
最新文章
- ubuntu/debian 安装SSH,并开启
- php 防止倒链,PHP防止图片倒链
- Linux中切换用户变成-bash4.1-$的解决方法
- 201521123022 《Java程序设计》 第十三周学习总结
- Resin 优化配置
- Microsoft WPF VS Adobe Apollo
- 【链表】逆序打印链表
- 《Essential C++》笔记之迭代器Iterator(泛型指针)
- 我可以编写一个CSS选择器来选择不具有某个类或属性的元素吗?
- Linux系统(七)组管理和用户管理
- 揭秘Mindscape WPF Elements 5新特性
- 计算机上word如何批量打印,两种批量打印多个word文档的方式
- 计算机初学者先学什么语言,计算机语言入门先学什么?
- java 加密与解密算法,简单地加密和解密算法(java实现)
- 笔记本电脑WLAN突然没有了(连不上wifi)
- C/C++的灵魂—指针实现冒泡排序、选择排序和插入排序
- python面试自我介绍_python自我描述
- 百慕大永中为何有权继续开发集成Office?
- OSChina 周五乱弹 ——这年头吃屎都不安全了
- 新电脑到手如何验机?保姆级攻略来了
热门文章
- 解决: 'Cannot call `.is_valid()` as no `data=` keyword argument was ' AssertionError: Cannot call `
- mysql mtop_mysqlmtop2.2运行出错
- mysql select 子查询_SELECT中常用的子查询操作
- Bootstrap全局CSS样式之表单
- CodeForces - 796D Police Stations bfs
- 2 MyWarCraftStudio v0.6版
- STL容器之deque
- C++ 11 nullptr关键字
- 排序算法之冒泡排序(C/C++)
- 用指针实现高低位倒序,疯了吧