题目503.下一个更大元素 II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
用例
输入: [1,2,1]
输出: [2,-1,2]
输入: [1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1]
输出: [2,3,4,5,6,7,8,9,10,-1,10,9,8,7,6,5,4,3,2]
解题思路
利用单调栈,并遍历两次可得结果
代码
1 | from collections import deque |
题目146.LRU缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。
获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。
写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。
用例
无
解题思路
- 利用双向链表实现
- 利用python中的orderdict实现
代码
1 | from typing import List |
题目
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
用例
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
解题思路
划分数字,利用中位数左边所有的数小于右边的数实现划分,参考这篇题解
代码
1 | class Solution: |
本文作者:
ketsudou
发布时间: 2020-05-25
最后更新: 2020-05-27
本文标题: leetcode-day12
本文链接: http://huangketsudou.github.io/2020/05/25/leetcode-day12/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处
发布时间: 2020-05-25
最后更新: 2020-05-27
本文标题: leetcode-day12
本文链接: http://huangketsudou.github.io/2020/05/25/leetcode-day12/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处