![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模拟
abant2
世界上最菜的arcem
展开
-
leetcode 169 多数元素 抵消法
这种简单题一般都很烦,这个题也是,由于这里面的元素一定大于等于数组的一半,所以可以两两抵消,剩下的那个数就是答案。维护两个变量,count和ans,ans存答案,如果count为0并且又有新的不相等的数就换。class Solution {public: int majorityElement(vector<int>& nums) { int ct = 1, ans = nums[0], n = nums.size(); for(int i.原创 2021-07-29 15:41:20 · 157 阅读 · 0 评论 -
leetcode 581 最短无序子数组 较难建模
此题和leetcode 768 最多能完成排序的块有些相似。但此题用单调栈的做法并不是最优,并且不太好做。解法一:排序可以将数组排序后和原数组比较,看不同的位置即可。解法二:扫描(常数空间,线性时间)我们可以把这个问题分解为两个子问题,找区间左端点和右端点。先看一个问题,如何找右端点?我们从左开始遍历,记录最大值,如果当前位置的值小于最大值,那就更新这个点为右端点,这样不断更新就可以找到。如何找左端点?一样的道理,从右往左遍历,记录最小值,如果当前值小于最小值就更新端点。注意:先找到右端.原创 2021-07-29 00:23:42 · 55 阅读 · 0 评论 -
leetcode 5825 暴力匹配两个数组怎么做
此题是真的离谱,周赛第三题放个暴力,还把我难倒了是最气的。此题是一个两两匹配的问题思路1:优先队列两两运算结果排序,运算结果从大到小统计。这种贪心的做法不对思路2:暴力平常就是暴力太少了,以至于到了该暴力的时候不会暴力。一开始的思路是求全排列,得到所有可能性,然后(m!)2(m!)^2(m!)2做,但是超时。之后才想到,根本不用,只要求出一个全排列就可以了,剩下的那个不动就行,这就是所有可能性。class Solution {typedef tuple<int, int, int&原创 2021-07-25 11:50:56 · 128 阅读 · 0 评论 -
leetcode 146 LRU缓存 链表随机访问
LRU缓存机制就是存键值对,但是会更新,并且要删除最不经常使用的,比如最多开10个应用,开第11个就必须删掉一个最久没用的。要求实现get和put两个O(1)操作,实现办法只有链表加随机访问,否则无法做O(1)的移位。如何实现链表随机访问?要调用c++里的list(双向链表),同时用一个map来做key到迭代器的键值对。注意:list和双端队列函数差不多,可以直接有一个移动的操作,splice,这个比较新。class LRUCache {typedef pair<int, int> .原创 2021-07-23 01:51:51 · 318 阅读 · 0 评论 -
leetcode 1882 服务器并行处理任务问题
这个题是比较经典的服务器,任务题。做这种题千万不能着急做,一定题目读明白,像此题就有一个并行的问题,如果有多台空闲服务器和多个任务,要考虑同时做。这种题目的数据结构也要好好的谨慎设计。class Solution {typedef pair<int, int> P;public: vector<int> assignTasks(vector<int>& servers, vector<int>& tasks) { .原创 2021-07-03 23:26:20 · 277 阅读 · 1 评论 -
leetcode 1802 线性变化问题 模拟+二分
解法一:模拟此题的模拟分为两个阶段。首先把地面铺满,这样一定是满足要求的,然后在index处开始累加即可。在第一阶段咱们直接模拟,index处的值每次加一,这个值减去2就是他每次辐射到的范围。当两边都被辐射到,即进入第二阶段后,可以直接用简单除法完成。class Solution {public: int maxValue(int n, int index, int maxSum) { int sum = n; int ret = 1; whil原创 2021-04-27 22:20:58 · 154 阅读 · 0 评论 -
leetcode 341 嵌套数组读所有数
此题真的是,如果你真的按照他说的做,那可要被逼疯了,各种条件。如果你能预处理一下就很好做了,两个函数直接设计返回就行。/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Retu原创 2021-03-23 18:40:42 · 61 阅读 · 0 评论 -
leetcode 922 按奇偶排序数组 II 双指针+维护列表 全两种做法
思路一(错误):双指针左右同时开弓,遇见不对的就停,交换,类似于快排,几乎一样的代码。但结果是错的,因为必须是奇数和偶数的换。思路二:对奇数和偶数分别维护一个列表,两个列表大小必须相同。但空间复杂度O(N)class Solution: def sortArrayByParityII(self, A: List[int]) -> List[int]: dbs = [[], []] for idx, ele in enumerate(A):原创 2020-11-12 09:30:39 · 576 阅读 · 0 评论 -
leetcode 406 根据身高重建队列 全两种做法
这题一开始也属于摸不到头脑那种,但是只要发现其中的关键点,只有比你高的人会影响到你的排位,这个核心点,答案就呼之欲出。解法一:从高到低首先将数组从高到低排序,然后从高到低看第二个元素,插后面的元素即可满足条件,代码如下:class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: high_to_low = sorted(people, key=lambda原创 2020-11-16 13:13:58 · 63 阅读 · 0 评论 -
leetcode 1370 桶用数组,不要用字典
较简单的题,python需要实现char和int的转换,需要ord,chr两个函数。用字典当桶做法如下:class Solution: def sortString(self, s: str) -> str: d = {} result = '' for c in s: if c not in d: d[c] = 1 else: d[原创 2020-11-25 10:45:22 · 54 阅读 · 0 评论 -
leetcode 49 哈希+字典+质数
解法一:容易想到用Counter计数然后作为key放进字典,但字典不能被hash,所以只能用桶再转tuple,代码如下:class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: d = {} for s in strs: bm = [0 for _ in range(26)] for c in s:原创 2020-12-14 09:26:35 · 90 阅读 · 0 评论 -
leetcode135 两次遍历消除局部限制
解法一:一次遍历解法二:两次遍历class Solution: def candy(self, ratings: List[int]) -> int: rs1 = [1 for _ in range(len(ratings))] rs2 = [1 for _ in range(len(ratings))] for i in range(1, len(ratings)): if ratings[i] > rati原创 2021-03-17 14:17:25 · 123 阅读 · 0 评论 -
leetcode 705 手写哈希表
解法一:大数组一开始想到的解法就是预存一个大数组,然后往里加就行。利用了桶的思想。注意:可能输入数据较小,在leetcode提交中N开的小一点会快很多。class MyHashSet: def __init__(self): """ Initialize your data structure here. """ self.N = 130000 self.l = [[] for _ in range(self.N原创 2021-03-13 13:44:25 · 108 阅读 · 0 评论