有意思的leetcode~
2022/2/20 6:29:36
本文主要是介绍有意思的leetcode~,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
夜深人静写力扣
前言
这几天好兄弟Matty吴分享了几道力扣的题,虽然是简单难度,但是思维要求我觉得还是有点要求的,思路很有趣,记录一下~~
1380.矩阵中的幸运数
题目描述
给你一个\(m*n\)的矩阵,矩阵中的数字各不相同。请你按任意顺序返回矩阵中的幸运数。幸运数字是指矩阵中满足同时下列两个条件的元素:
- 在同一行的所有元素中最小
- 在同一列的所有元素中最大
原题目链接:1380. 矩阵中的幸运数 - 力扣
思路说明
实话说,一开始看到这道题是有点懵的,找不到一点思路。如果暴力遍历的话,后面的判断条件以我的功力应该会写的非常拉跨且混乱。还好还好,力扣不缺大佬,此处参考的是宫水三叶大佬的题解和思路(会添加上自己的理解和思路):题解链接
这里使用的思想是模拟思想。简单说说我自己对模拟的理解:在我看来模拟的关键是用代码实现(模拟过程)题目中的要求或者限制,所以对我们的考验就是能不能理解题意并且将它转变为编程语言。回到这道题,最主要的限制是:同行最小,同列最大。这里我们可以将它分解成行和列两部分来验证,也就是使用两个数组来分别存放每行和每列中的最小和最大数值,最后一部开始验证同一位置下的数字是否一致,若一致则说明是幸运数字。最后只需要考虑输出形式就可以了~
代码
int[] row = new int[55],col = new int[55]; int n = matrix.length , m = matrix[0].length; for(int i = 0 ; i < n ; i++){ row[i] = 100001; for(int j = 0 ; j < m ; j++){ row[i] = Math.min(row[i],matrix[i][j]); col[j] = Math.max(col[j],matrix[i][j]); } } List<Integer> ans = new ArrayList<>(); for(int i = 0 ; i < n ; i++){ for(int j = 0 ; j < m ; j ++){ int t = matrix[i][j]; if(t == row[i] && t == col[j]) ans.add(t); } } return ans;
1608.特殊数组的特征值
题目
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。
注意: x 不必 是 nums 的中的元素。
如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。
原题目链接:1608. 特殊数组的特征值
思路
这道题虽然说是简单题,但是思路确实很难找到。说实话一开始看到数组长度在100以内且元素大小1000以内,就觉得应该要用暴力解法,但是具体到实现,又不知道如何写了。看了眼题解,就发现了一个很妙的解法:题解链接
这里的做法是不考虑排序,因为可能会出现重复数字且这道题不关心元素的索引位置,所以我们只要统计每个数字出现的次数就好了,最后就可以将每次数字出现的次数加起来验证特征值。我们使用一个长度比输入大一的数字用来计算(用索引表示数字,元素表示出现次数)。一个比较关键的点:特征值一定在1到数组最大值之间(这里可以自己推导验证一下,结果是成立的)。之后就是使用后序遍历了(因为特征数定义的范围是大于等于,那么这里用倒序会比较好一点(我们那个计数数据是1-N的嘛,倒序来计算,就可以直接累加计算,不用再去减其他一些东西)。
以上就是大概的思路,表达有点不清楚,还是建议参考题解。
代码
class Solution { public int specialArray(int[] nums) { int maxnum = 0; for(int num : nums){ if(num > maxnum){ maxnum = num; } } int[] count = new int[maxnum+1]; for(int num : nums){ count[num] += 1; } int sum = 0; for(int i = maxnum ; i >= 0 ; i--){ sum += count[i]; if(sum == i){ return i; } } return -1; } }
后续
其实还有一道有意思的题目,也是这位好兄弟的分享,不过这道题当时的思路很清晰,后来也就没考虑把它记录下来了。Anyway,夜深人静写力扣的思路确实会清晰很多hhh~
这篇关于有意思的leetcode~的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享