classSolution: defis_pop_order(self, push_v, pop_v): n = 0 j = 0 for num in push_v: push_v[n] = num while n >= 0and push_v[n] == pop_v[j]: j += 1 n -= 1 n += 1 returnTrueif n == 0elseFalse
import heapq classSolution: defget_least_numbers(self, nums, k): res = [] iflen(nums) >= k and k != 0: pq = [] for i inrange(k): heapq.heappush(pq, (-1 * nums[i])) for i inrange(k, len(nums)): if (-1 * pq[0]) > nums[i]: heapq.heapreplace(pq, (-1 * nums[i])) for i inrange(k): res.append(-1 * pq[0]) heapq.heappop(pq) return res
if __name__ == "__main__": nums = [4, 5, 1, 6, 2, 7, 3, 8] k = 4 print(Solution().get_least_numbers(nums, k))
[4, 3, 2, 1]
思路2(sort排序法): 对数组按照递增顺序进行排序,取前k个元素。
时间复杂度O(nlogn), 空间复杂度O(1)
classSolution: defget_least_numbers(self, nums, k): res = [] if k == 0orlen(nums) == 0: return res else: returnsorted(nums)[:k]
if __name__ == "__main__": nums = [4, 5, 1, 6, 2, 7, 3, 8] k = 4 print(Solution().get_least_numbers(nums, k))
classSolution: def__init__(self): self.strs = "" self.hash_map = dict() definsert(self, char): self.strs += char if char in self.hash_map: self.hash_map[char] += 1 else: self.hash_map[char] = 1 deffirst_appearing_once(self): for c in self.strs: if self.hash_map[c] == 1: return c return'#' if __name__ == "__main__": s = Solution() s.insert("g") print(s.first_appearing_once()) s.insert("o") print(s.first_appearing_once()) s.insert("o") print(s.first_appearing_once()) s.insert("g") print(s.first_appearing_once()) s.insert("l") print(s.first_appearing_once()) s.insert("e") print(s.first_appearing_once())
g
g
g
#
l
l
59. 滑动窗口的最大值
题目描述
给定一个长度为n的数组num和滑动窗口的大小size,找出所有滑动窗口里数值的最大值。
Input: [2, 3, 4, 2, 6, 2, 5, 1], 3
Output: [4, 4, 6, 6, 6, 5]
题解
思路(暴力法): 直接遍历数组,遍历起始位置为0,终止位置为n-size,求取该区间最大值即可
时间复杂度O(mn),空间复杂度O(1)
classSolution: defmax_in_windows(self, nums, size): n = len(nums) if n < size or size == 0: return [] res = [] for i inrange(n - size + 1): res.append(max(nums[i: i + size])) return res