【Leetcode Daily】2815数组中的最大数对和
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:264|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个数组,找出其中一对数的和的最大值,这对数要求最大数位数字相等,不存在的情况下返回 -1.
思路分享
要求最大数位的值相同,那么就有十种情况,0-9,可以相当于维护长度为 10 的表,每个记录和比较大的情况,然后遍历数字,在表内有值的情况下计算和并记录,取最大值。
O(n) 枚举的基本思想可以看 【Leetcode Daily】1两数之和。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution { |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-04-11
【Leetcode Daily】2843统计对称整数的数目
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个范围,统计这其中所有的对称整数的数目,对称整数要求有 2*n 位,n是整数,而且前n位数字之和与后n位数字之和相等。 思路分享 首先是普通的枚举法,毕竟本题是 easy,数字范围不大,暴力即可 ac。不过如何优雅简洁地暴力也是一门学问,如果是陆爻齐原来的想法,很可能会通过逐位模十来获取位数,但实际上处理数位用字符串更合适,结合上 reduce 函数可以间接地求得数位和,就有了下面的枚举写法。 接下来使用数位 dp 就可以解决当数字范围大时候的问题,但安排紧张,就先这样罢,要是能有时间把灵山的慢慢过就好力。 代码解答(强烈建议自行解答后再看) 枚举法 12345678910111213class Solution {public: int countSymmetricIntegers(int low, int high) { int result = 0; for (int i = low; i < high+1; i++) { ...

2025-06-08
【Leetcode Daily】1两数之和
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整型数组和目标值,从数组中找出两个值之和正好为目标值的下标,题目保证数组不重复,且必有唯一答案。要求两个下标不能相同。 思路分享 暴力法就是直接上两层循环,本题的目标是把时间复杂度降到O(n)。 下面就是灵神题解中介绍枚举方法,一个循环遍历一个值,每次遍历就在哈希表查找剩余另一个的值,没找到就把当前值和对应下标存哈希表。 https://leetcode.cn/problems/two-sum/solutions/2326193/dong-hua-cong-liang-shu-zhi-he-zhong-wo-0yvmj/ 注意,顺序很重要,不能先放哈希表再查找,不然就会找到相同下标的情况。 代码解答(强烈建议自行解答后再看) 参考题解 1234567891011121314class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { ...

2025-06-09
【Leetcode Daily】2441与对应负数同时存在的最大正整数
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个数组,找一种一组值相加为 0,且在多组这样的值中,选出正数最大的数值返回。 思路分享 【Leetcode Daily】1两数之和 ,在这个枚举上,要求相加为零,不过不用记录下标,因此可以采用 set 来记录遍历的值。 https://leetcode.cn/problems/largest-positive-integer-that-exists-with-its-negative/solutions/1895719/by-endlesscheng-jjtb/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728293031class Solution {public: int findMaxK(vector<int>& nums) { int max_int = -1; unordered_set<int> rec; ...

2025-06-10
【Leetcode Daily】1512好数对的数目
题目浅析 想查看原题可以点击题目链接。 简单地说,就是找出数组中所有数值相同的数对(好数对)数目,但是数对内的两个值下标不能相同,且交换位置仍视作一个数对。 思路分享 本题就是很基础的枚举题,如果暴力方法就是一个循环遍历数对左侧,另一循环遍历右侧,复杂度为 O(n^2)。 而相对高效的枚举方法为,只用一次循环,遍历到的数字记录到哈希表上各个数值出现的频次,每次遇到一个值,就可以查其左边有多少相同值,也就出现了多少的好数对。 换句话,就是遍历数对的右侧值,并以 O(1) 的复杂度记录其左侧的情况。 枚举的思路以及先记录答案再更新记录的原因可看 【Leetcode Daily】1两数之和...

2025-06-11
【Leetcode Daily】2001可互换矩形的组数
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个二维数组,其中的每一个一维数组只有两位,表示每个矩形的宽和长,找出所有两两长宽比相同矩形的组数。 思路分享 最重要的一点,是发现所谓的矩形不过是障眼法,题目看的就是长宽比,所以逐个枚举长宽比并记录即可。 后续步骤与上一题完全一致:【Leetcode Daily】1512好数对的数目。 O(n) 枚举的基本思想可以看 【Leetcode Daily】1两数之和。 代码解答(强烈建议自行解答后再看) 参考题解 1234567891011class Solution {public: long long interchangeableRectangles(vector<vector<int>>& rectangles) { unordered_map<double, int> rec; long long res = 0; for (const auto &r : rectangles)...

2025-06-12
【Leetcode Daily】1128等价多米诺骨牌对的数量
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个元素为长度2的vector的vector,找出其中所有元素 vector 相同的对数,其中相同指的是两个 vector,各个元素相同,或者第一个元素与另一个的第二个相同,剩余两个相同。 思路分享 用二维数组当哈希表记录即可,可以选择对一个数对维护两个哈希表位,但哈希表的维护消耗资源其实不小,所以直接调整数对统一数对中的大小相对顺序,就只要用一个位置对应一个数对。比如把(2,1)转化为(1,2)来看。 C++中,可以通过 minmax 构建一个第一个元素小于第二个元素的 pair。 https://leetcode.cn/problems/number-of-equivalent-domino-pairs/solutions/3661647/mei-ju-you-wei-hu-zuo-pythonjavaccgojsru-me3c/ O(n) 枚举的基本思想可以看 【Leetcode Daily】1两数之和。 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112class...
公告
不定时更新,记录所学所想
系列文章