
堆-哈希表-栈
谢蟹蟹猴啊
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 59 - I. 滑动窗口的最大值 ---最大堆优先队列 或者单调队列!!!!!!
class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { int n = nums.size(); if(n == 0) return {}; deque<int> q; for (int i = 0; i < k; ++i) { while (!q.em.原创 2021-08-13 16:01:51 · 106 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
class Solution {public: Node* copyRandomList(Node* head) { if(head == nullptr) return nullptr; Node* cur = head; unordered_map<Node*, Node*> map; // 3. 复制各节点,并建立 “原节点 -> 新节点” 的 Map 映射 while(cur != null.原创 2021-07-31 16:01:29 · 83 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
class MinStack {private: stack<int>valStack; stack<int>minStack;public: MinStack(){ //构造函数,每次创建的时候调用。 while(!valStack.empty())valStack.pop(); //这边其实可以不写 算了写就写了吧 while(!minStack.empty())minStack.pop(); } .原创 2021-07-30 16:31:49 · 63 阅读 · 0 评论 -
面试题31:栈的压入和弹出序列,根据栈的压入和弹出序列来判断是他们是不是正确的!!!
思路: 这道题感觉在面试中很容易被问到,因为的确感觉不是非常难。可以用模拟的思路来写。就是遍历压入序列不断压入栈,一旦栈非空且与弹出序列相同就进行压出,然后知道序列不同了,说明要进新元素了,或者全部消耗了;如果压入和弹出步对等,最终的结果就是栈非空!!!class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {原创 2021-07-30 16:12:08 · 69 阅读 · 0 评论 -
多多笔试7.25笔试复盘
题目1: 输入一个N代表组数,接下来输入N组,每组2个数字空格隔开,代表线段的两端,如果存在任意一对线段存在包含关系就返回true,否则返回false.思路: 考虑两两组合判断,时间复杂度是o(N^2),一种排序,一种不排序,但是遍历时要考虑先后包含关系#include<bits/stdc++.h>using namespace std;int main(){ int N; cin>>N; vector<vector<int>>原创 2021-07-26 16:06:06 · 131 阅读 · 0 评论 -
面试题 10.02. 变位词组 ---基于哈希表的字符串排序~~~
class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { //整体还是基于排序的思路 unordered_map<string,vector<string>>map; vector<vector<string>>res; for(auto & st.原创 2021-07-18 10:38:12 · 109 阅读 · 0 评论 -
面试题 17.10. 主要元素 ---哈希表and摩尔排序!!
题目: 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。 思路1: 最朴素的想法是用哈希表遍历数组的同时来记录增加个数,然后判断对应哈希表元素的个数是不是超过数组长度一半,如果超过了就返回这个数字。否则返回1.但是这样的时间复杂度就是o(N)了。而且不用担心少解,超过一半最多一种可能。class Solution {public: int majorityEle原创 2021-07-09 12:00:01 · 343 阅读 · 5 评论 -
930. 和相同的二元子数组 前缀和+哈希表:这里是前缀存到哈希表里面或者滑动窗口
题目: 给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。子数组 是数组的一段连续部分。 示例:输入:nums = [1,0,1,0,1], goal = 2输出:4解释:如下面黑体所示,有 4 个满足题目要求的子数组:[1,0,1,0,1][1,0,1,0,1][1,0,1,0,1][1,0,1,0,1]思路: 一开始还打算用动态规划,但是这里不是无穷拿,所以只能是01背包,但是是连续的区间,不能用01背包。那考原创 2021-07-08 10:09:22 · 128 阅读 · 0 评论 -
1711. 大餐计数--利用哈希表存个数,然后用目标值减去当前值索引哈希表~~~经典操作
大餐计数class Solution {public: static constexpr int MOD = 1e+9+7; int countPairs(vector<int>& deliciousness) { int maxVal = *max_element(deliciousness.begin(), deliciousness.end()); int maxSum = maxVal * 2; int .原创 2021-07-07 10:05:47 · 67 阅读 · 0 评论 -
1418. 点菜展示表 --双重哈希表~~~~~~~~
class Solution {public: vector<vector<string>> displayTable(vector<vector<string>>& orders) { unordered_set<string> namelist; unordered_map<int, unordered_map<string, int>> map; fo.原创 2021-07-06 10:24:58 · 121 阅读 · 0 评论 -
Leetcode1049:最后一块石头的重量II && Leetcode 1046:最后一块石头的重量I --介绍了大堆顶和小堆顶的知识!!!!
题目:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。示例1:输入:stones =原创 2021-06-08 11:13:12 · 206 阅读 · 0 评论 -
Leetcode692:前K个高频单词(哈希表+自定义排序!!)
思路: 用哈希表来存字符串和对应出现的次数是必定要做的操作。这道题关键在于如何从哈希表中检索元素次数从高到低进行排序,以及对首字符的判断。在这里就涉及到排序算法。排序和通常和堆挂钩。第一种代码通过自定义的排序规则对sort进行排序。 其中最终的bool返回函数, 类似冒泡等排序算法中两个数字的比较如果满足条件就替换,可以看到本题替换的条件是新来的a元素对应的次数要大于比较的元素。那就是从高到低排序。如果次数相同, 替换的条件是 a<b 字符比较就是从头开始比较小的话提换~class Solut.原创 2021-05-22 11:10:36 · 210 阅读 · 0 评论 -
Leetcode347:前K个高频元素~~后续快速排序再看看~ 主要涉及到最小堆优先队列的pair--以及哈希表的索引之auto xx=map.begin()
class Solution {public: static bool cmp(pair<int, int>& m, pair<int, int>& n) { return m.second > n.second; } vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int, in原创 2021-05-21 22:12:46 · 132 阅读 · 1 评论