【LeetCode】373 and 682

news/2024/11/29 8:50:32/

查找和最小的k对数

在这里插入图片描述
思路:
该题一开始想用双指针来做,哪个指针与下一个数之前的gap越小,则移动哪个指针。这对k比较小的情况能够求解,但是k比较大时,需要回退至之前的元素,而双指针却做不到,得用一个数据结构来存储之前的状态。于是我们想到用堆来求解。
解法:堆

  1. 构建小顶堆,初始元素为nums1[0]+nums2[0]。
  2. 弹出堆顶元素nums1[i]+nums2[j](当前最小元素),若存在下一元素(j+1<len(nums2),则添加nums1[i]+nums2[j+1],若不存在,则继续弹出,
  3. 若j==0,则表明当前i状态下最小元素和已弹出,则进入下一状态,nums1[i+1]+nums2[0]入堆,这时可能仍然有nums1[i]+nums2[j],j!=0在堆中,后续可能弹出(解决之前双指针面临的回退问题)。
  4. 后续重复步骤2、3,直至堆为空或结果列表等于k。
    总结:
    解决此类topK的问题,一般都可以尝试用堆来解决。
class Solution:def kSmallestPairs(self, nums1, nums2, k):h = []from heapq import heappop,heappushdef push(i, j):if i < len(nums1) and j < len(nums2):heappush(h, [nums1[i] + nums2[j], i, j])push(0, 0)pairs = []while h and len(pairs) < k:_, i, j = heappop(h)pairs.append([nums1[i], nums2[j]])push(i, j + 1)if j == 0:push(i + 1, 0)return pairs

棒球比赛

在这里插入图片描述
在这里插入图片描述
解法:模拟
这题比较简单,按照题意构造一个栈,因为我们只处理涉及栈顶或倒数第二个元素的操作。

class Solution:def calPoints(self, ops: List[str]) -> int:score = 0result = []for op in ops:if op == "C":score -= result[-1]result.pop()elif op == "D":score += result[-1]* 2result.append(result[-1]* 2)elif op == "+":score += result[-1] + result[-2]result.append(result[-1] + result[-2])else:score += int(op)result.append(int(op))return score

http://www.ppmy.cn/news/825641.html

相关文章

力扣 373. 查找和最小的K对数字

题目 给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 输入: nums1 [1,7,11], nums2 [2…

leetcode:373. 查找和最小的 K 对数字

题目来源 leetcode&#xff1a;373. 查找和最小的 K 对数字 题目描述 class Solution { public:vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {} };题目解析 分析数据 数据量非常大&#xff0c;如果…

模拟卷Leetcode【普通】373. 查找和最小的K对数字

汇总&#xff1a;模拟卷Leetcode 题解汇总 373. 查找和最小的K对数字 给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (…

373、对网络中容易出现的故障归纳

运维人最怕网络出故障。先抛开一些闲话不谈&#xff0c;网络故障从大体上来讲&#xff0c;有下面几种情况&#xff1a; // 硬件问题 // 既然网络设备是一台机器&#xff0c;就有可能出现“疲劳”&#xff0c;从而导致各种各样的硬件故障出现。硬件的故障&#xff0c;一般有下面…

**Leetcode 373. 查找和最小的 K 对数字

力扣 类似第k小素分数 核心思路&#xff1a;pair的第二个数枚举&#xff0c;作为初始化&#xff0c;假设第二个数有m种可能&#xff0c;等于有m个队列&#xff0c;那么就等于从nums1里面逐步加入数&#xff0c;等价于多路合并队列 每个队列往后走一步&#xff0c;具体看代码 …

LeetCode刷题——查找和最小的 K 对数字#373#Medium

查找和最小的 K 对数字的思路探讨与源码 查找和最小的 K 对数字的题目如下图&#xff0c;该题属于数组类和队列类型的题目&#xff0c;主要考察对于排序方法的使用和数组结构的理解。本文的题目作者想到2种方法&#xff0c;分别是多路归并方法和优先队列方法&#xff0c;其…

Leetcode 373. 查找和最小的K对数字 (自定义优先队列)

先将nums1的前k个元素和nums2第一个元素的下标构成的和放到优先队列中&#xff0c;弹出最小的元素后&#xff0c;让nums2后面的元素补位&#xff0c;即依次得到后面小的数。 using PII pair<int, int>; class Solution { public:vector<vector<int>> kSmal…

LeetCode_优先级队列_中等_373.查找和最小的 K 对数字

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1, v1), (u2,…