力扣刷题
文章平均质量分 50
小麦China
来我公众号一起学习吧:xiaomaiChina
展开
-
返回有序数组所有数的平方值中有多少种不同的取值
题目如下:给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例:nums = {-1,1,1,1},那么你应该返回的是:1。因为这个数组所有数的平方取值都是1,只有一种取值nums = {-1,0,1,2,3}你应该返回4,因为nums数组所有元素的平方值一共4种取值:1,0,4,9作者:列文链接:https://juejin.cn/post/6844903828525940743来源:原创 2021-06-07 11:33:05 · 254 阅读 · 0 评论 -
常用模板,常用面试题
字符串分离splitstringvector<string> splitstring(string& s,string& c) { vector<string> res; string::size_type pos1,pos2; pos1=0; pos2=s.find(c,0); while(pos2!=string::npos) {原创 2021-04-25 10:17:32 · 352 阅读 · 0 评论 -
力扣895. 最大频率栈(哈希+栈)
力扣895. 最大频率栈(哈希+栈)复杂度分析 时间复杂度:对于push和pop操作,O(1)。 空间复杂度:O(N),其中N为FreqStack中元素的数目 这道题奇妙之处在于把出现频率相同的值存储为一组元素,这样在pop的时候,找到频率最高的那组元素,按照后入先出的顺序,弹出即可Example: 如果输入顺序为x,y,z,z,y, x,x,y1、输入x,y,z 它们的频率都都是1, 所以{1, {x, y,z}}2、继续输入z,y, x 这个时候它...原创 2021-04-21 17:04:57 · 290 阅读 · 0 评论 -
力扣692. 前K个高频单词(哈希+小顶堆)
力扣692. 前K个高频单词(哈希+小顶堆)https://leetcode-cn.com/problems/top-k-frequent-words/哈希记录次数 建立list,排序,形成小顶堆 输出前k个几个注意的点:1、迭代器的使用:C++迭代器(STL迭代器)iterator详解正向:vector<pair<string, int>>::iterator it=sorted_list.begin();it!=sorted_list.end();it+原创 2021-04-16 13:07:24 · 247 阅读 · 1 评论 -
力扣1707. 与数组中元素的最大异或值(字典树)
力扣1707. 与数组中元素的最大异或值(字典树)字典树class TrieNode{public: TrieNode* next[2]; int low; TrieNode() { low=INT_MAX; memset(next,0,sizeof(next)); }};class TrieTree{public: TrieNode* proot; TrieTree() {原创 2021-04-16 10:38:01 · 209 阅读 · 0 评论 -
力扣15. 三数之和(排序 + 双指针)
力扣15. 三数之和(排序 + 双指针)15. 三数之和https://leetcode-cn.com/problems/3sum/排序 + 双指针class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>>res; int n=nums.si.原创 2021-04-15 18:59:55 · 174 阅读 · 0 评论 -
力扣剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫问题)
力扣剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫问题)约瑟夫问题公式pos=(pos+m)%i反推class Solution {public: int lastRemaining(int n, int m) { int pos=0; for(int i=1;i<=n;i++) { pos=(pos+m)%i;//公式 } return pos;原创 2021-04-13 14:45:02 · 83 阅读 · 0 评论 -
力扣179. 最大数(自定义排序)
力扣179. 最大数(自定义排序)https://leetcode-cn.com/problems/largest-number/自定义排序下面考虑输入数组 有相同数字开头 的情况,例如 [4,42][4,42] 和 [4,45][4,45]。对于 [4,42][4,42],比较 442 > 424442>424,需要把 44 放在前面;对于 [4,45][4,45],比较 445 < 454445<454,需要把 4545 放在前面。sort(nums.原创 2021-04-12 11:42:08 · 353 阅读 · 0 评论 -
力扣LCP 30. 魔塔游戏(贪心+小顶堆)
力扣LCP 30. 魔塔游戏(贪心+小顶堆)LCP 30. 魔塔游戏贪心模拟过程,将之前扣减的血量都放入优先队列中,每次快死之前,就取出堆顶的元素(扣最多的血)给自己加上,这样的贪心思想能保证我们移动到尾部的元素是最少的优先级队列priority_queue这是一个拥有权值queue,其内部元素按照元素的权值排列。权值较高者排在最前优先出队。其中缺省情况下系统是通过一个max-heap以堆实现完成排序特性,表现为一个以vector表现的完全二叉树。//升序队列 小顶堆 gre原创 2021-04-06 17:48:34 · 348 阅读 · 0 评论 -
力扣26和80除有序数组中的重复项(快慢指针)
力扣26和80除有序数组中的重复项(快慢指针)26. 删除有序数组中的重复项https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/class Solution {public: int removeDuplicates(vector<int>& nums) { int n=nums.size(); int i=0,j=0; map原创 2021-04-06 11:58:07 · 96 阅读 · 0 评论 -
力扣74. 搜索二维矩阵(从左下开始)
力扣74. 搜索二维矩阵(从左下开始)https://leetcode-cn.com/problems/search-a-2d-matrix/class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size();//行 if(m==0)return false; .原创 2021-03-30 08:49:12 · 63 阅读 · 0 评论 -
剑指 Offer 刷题
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面暴力,数组另存先遍历奇数放入数组,再遍历偶数放入数组class Solution {public: vector<int> exchange(vector<int>& nums) { vector<int>odd; vector<int>even; vector<int>result; ...原创 2021-03-24 15:19:48 · 95 阅读 · 0 评论 -
力扣456. 132模式(数组记录最小,单调栈记录次小,枚举得到最大)
力扣456. 132模式(数组记录最小,单调栈记录次小,枚举得到最大)https://leetcode-cn.com/problems/132-pattern/一、暴力132模式的三元组下标(i, j, k)(i,j,k),枚举其中的22个下标时间复杂度为O(n^2)O(n2),很容易超出时间限制class Solution {public: bool find132pattern(vector<int>& nums) { int n = nums...原创 2021-03-24 14:45:48 · 119 阅读 · 0 评论 -
力扣341. 扁平化嵌套列表迭代器(深度优先搜索)
力扣341. 扁平化嵌套列表迭代器(深度优先搜索)https://leetcode-cn.com/problems/flatten-nested-list-iterator/深度优先搜索思路在构造函数中直接解析所有元素(用数组保存),然后在遍历时依次输出即可其实要解析一个扁平化嵌套列表,思路与dfs非常类似,将vector<NestedInteger>当作一个非连通图,每个NestedInteger是一个连通图,里面存了各个节点及其所有的邻接点。然后在遍历每个图时,只要原创 2021-03-23 00:48:02 · 119 阅读 · 0 评论 -
力扣1226. 哲学家进餐(信号量)
力扣1226. 哲学家进餐(信号量)https://leetcode-cn.com/problems/the-dining-philosophers/信号量假设每个哲学家都先拿左手的叉子,再拿右手的叉子,那么就有可能出现五个哲学家都拿起左手的叉子,且都拿不了右手的叉子的情况。为了解决这个问题,一种可行的办法是对拿叉子这个过程加互斥信号量,所有哲学家必须先获得拿叉子的“许可证”,然后依次拿起叉子,再释放这个“许可证”。这样就保证了DeadLock Free。#include &l原创 2021-03-22 14:54:18 · 317 阅读 · 0 评论 -
力扣1195. 交替打印字符串(信号量)
力扣1195. 交替打印字符串(信号量)https://leetcode-cn.com/problems/fizz-buzz-multithreaded/信号量四个线程四个信号量这题倒是不难,本质上是进程同步问题,使用信号量就好了。在这道题上纠结了好久,一直超时,最后发现是因为线程没有主动结束。。#include <semaphore.h>class FizzBuzz {private: int n; int cur; sem_t fizz原创 2021-03-22 13:30:19 · 164 阅读 · 0 评论 -
力扣1117. H2O 生成(信号量)
力扣1117. H2O 生成(信号量)https://leetcode-cn.com/problems/building-h2o/信号量关键在于H和O如何互相等待互相通知,利用信号量可以解决,代码如下。#include <semaphore.h>class H2O {public: sem_t hjob; sem_t ojob; sem_t hlimit; sem_t olimit; H2O() { sem_ini原创 2021-03-22 11:41:36 · 254 阅读 · 0 评论 -
力扣1116. 打印零与奇偶数(信号量)
力扣1116. 打印零与奇偶数(信号量)https://leetcode-cn.com/problems/print-zero-even-odd/信号量解题思路有几个线程就用几个信号量,最先开始的信号量初始化为1,其他初始化为0,然后根据条件判断实现同步#include <semaphore.h>class ZeroEvenOdd {private: int n; sem_t zerojob; sem_t evenjob; sem_原创 2021-03-22 01:18:57 · 187 阅读 · 0 评论 -
力扣1115. 交替打印FooBar(信号量)
力扣1115. 交替打印FooBar(信号量)https://leetcode-cn.com/problems/print-foobar-alternately/信号量参考《力扣1114. 按序打印》https://blog.csdn.net/qq_35683407/article/details/115058869?spm=1001.2014.3001.5501#include <semaphore.h>class FooBar {private: int原创 2021-03-22 00:49:53 · 478 阅读 · 0 评论 -
力扣191. 位1的个数(位运算)
力扣191. 位1的个数(位运算)https://leetcode-cn.com/problems/number-of-1-bits/位运算class Solution {public: int hammingWeight(uint32_t n) { int result=0; for(int i=0;i<32;i++) { int temp=n&1; if(temp==原创 2021-03-22 00:36:48 · 185 阅读 · 0 评论 -
力扣1114. 按序打印(信号量实现同步)
力扣1114. 按序打印(信号量实现同步)https://leetcode-cn.com/problems/print-in-order/信号量实现同步信号量是用来实现对共享资源的同步访问的机制,其使用方法和条件变量类似,都是通过主动等待和主动唤醒来实现的。c 语言提供的<sempahore.h>库#include <semaphore.h>class Foo {public: sem_t firstjob; sem_t second..原创 2021-03-21 23:31:42 · 221 阅读 · 0 评论 -
力扣73. 矩阵置零(哈希记录0出现的行列标号)
力扣73. 矩阵置零(哈希记录0出现的行列标号)https://leetcode-cn.com/problems/set-matrix-zeroes/哈希记录0出现的行列标号算法思路:1)设置两个数组hashi[矩阵行数]和hashj[家族很列数],均初始化为0;hashi[i]不为0表示矩阵第i行有0,同理hashj[j]不为0表示矩阵第j行有0。2)遍历矩阵,当[i][j]为0时,hashi[i]=1, hashj[j]=1。3)遍历hashi,若hashi[i]不为0,将矩阵第原创 2021-03-21 18:06:18 · 275 阅读 · 1 评论 -
力扣150. 逆波兰表达式求值(栈),附四则运算表达式求值
力扣150. 逆波兰表达式求值(栈)https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/栈逆波兰表达式严格遵循「从左到右」的运算。计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式,进行如下操作: 如果遇到操作数,则将操作数入栈; 如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。 整个原创 2021-03-21 16:58:56 · 479 阅读 · 0 评论 -
力扣1603. 设计停车系统(维护计数器)
力扣1603. 设计停车系统(维护计数器)https://leetcode-cn.com/problems/design-parking-system/维护计数器思路与算法为每种车维护一个计数器,初始值为车位的数目。此后,每来一辆车,就将对应类型的计数器减1。当计数器为0时,说明车位已满。时间复杂度 时间复杂度:单次操作为O(1)。 空间复杂度:O(1)。 class ParkingSystem {public: int mybig=0; ...原创 2021-03-19 12:37:49 · 162 阅读 · 0 评论 -
力扣115. 不同的子序列(字符串+动态规划)
力扣115. 不同的子序列(字符串+动态规划)https://leetcode-cn.com/problems/distinct-subsequences/字符串+动态规划从左往右匹配class Solutionfront {public: int numDistinct(string s, string t) { int m = s.size(); int n = t.size(); if (m < n) { return 0; } v原创 2021-03-17 09:06:33 · 663 阅读 · 0 评论 -
力扣59. 螺旋矩阵 II(按层模拟)
力扣59. 螺旋矩阵 II(按层模拟)https://leetcode-cn.com/problems/spiral-matrix-ii/给你一个正整数n ,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]按层模拟复杂度分析时间复杂度:O(n^2),其中 n 是给定的正整数。矩阵的大小...原创 2021-03-16 00:48:26 · 149 阅读 · 0 评论 -
力扣54. 螺旋矩阵(按层模拟)
力扣54. 螺旋矩阵(按层模拟)https://leetcode-cn.com/problems/spiral-matrix/按层模拟从左到右,到最右时下移一行,直到下移一行超过了最下 从上到下,到最下时左移一列,直到左移一列超过了最左 从右到左,到最左时上移一行,直到上移一行超过了最上 从下到上,到最上时右移一列,直到右移一列超过了最右复杂度分析时间复杂度:O(mn),其中 m 和 n 分别是输入矩阵的行数和列数。矩阵中的每个元素都要被访问一次。空间复杂度:O(1)。.原创 2021-03-15 02:42:38 · 228 阅读 · 0 评论 -
力扣705. 设计哈希集合(数组实现哈希)
力扣705. 设计哈希集合(数组)https://leetcode-cn.com/problems/design-hashset/不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现 MyHashSet 类:void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。示例:输入:["My原创 2021-03-15 00:46:22 · 138 阅读 · 0 评论 -
力扣706. 设计哈希映射(数组实现哈希)
力扣706. 设计哈希映射(数组实现哈希)https://leetcode-cn.com/problems/design-hashmap/不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返原创 2021-03-14 23:59:58 · 156 阅读 · 0 评论 -
力扣1047. 删除字符串中的所有相邻重复项(栈)
力扣1047. 删除字符串中的所有相邻重复项(栈)https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我..原创 2021-03-10 09:58:25 · 196 阅读 · 0 评论 -
力扣503. 下一个更大元素 II(单调栈、拉长循环数组,遍历两次)
力扣503. 下一个更大元素 II(拉长循环数组,遍历两次)给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2.原创 2021-03-07 13:14:33 · 178 阅读 · 0 评论 -
力扣232. 用栈实现队列(双栈)
力扣232. 用栈实现队列(双栈)https://leetcode-cn.com/problems/implement-queue-using-stacks/请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,原创 2021-03-05 09:18:54 · 219 阅读 · 1 评论 -
力扣674. 最长连续递增序列(贪心、动态规划)
力扣674. 最长连续递增序列(贪心)https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1],原创 2021-03-04 22:48:28 · 132 阅读 · 1 评论 -
力扣354. 俄罗斯套娃信封问题(动态规划)
力扣354. 俄罗斯套娃信封问题(动态规划)https://leetcode-cn.com/problems/russian-doll-envelopes/给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。注意:不允原创 2021-03-04 20:51:18 · 336 阅读 · 2 评论 -
力扣300. 最长递增子序列(动态规划)
力扣300. 最长递增子序列(动态规划)https://leetcode-cn.com/problems/longest-increasing-subsequence/给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列原创 2021-03-04 17:15:17 · 204 阅读 · 1 评论 -
力扣22. 括号生成(动态规划)
力扣22. 括号生成(动态规划)数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8动态规划反思:首先,面向小白:什么是动态规划?在此题中,动态规划的思想类似于数学归纳法,当知道所有 i<n 的情况时,我们可以..原创 2021-03-04 00:55:48 · 771 阅读 · 1 评论 -
力扣4. 寻找两个正序数组的中位数(二分查找)
力扣4. 寻找两个正序数组的中位数(二分查找)给定两个大小分别为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5..原创 2021-03-03 19:54:52 · 137 阅读 · 1 评论 -
力扣338. 比特位计数(动态规划)
力扣338. 比特位计数(动态规划)给定一个非负整数num。对于0 ≤ i ≤ num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度为O(n)。你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何...原创 2021-03-03 11:26:03 · 193 阅读 · 0 评论 -
力扣237. 删除链表中的节点(与下一个节点交换)
力扣237. 删除链表中的节点(与下一个节点交换)请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 --head =[4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node ...原创 2021-03-02 21:16:30 · 291 阅读 · 0 评论 -
力扣8. 字符串转换整数 (atoi)(自动机)
力扣8. 字符串转换整数 (atoi)(自动机)不是很懂题解:https://leetcode-cn.com/problems/string-to-integer-atoi/solution/zi-fu-chuan-zhuan-huan-zheng-shu-atoi-by-leetcode-/复杂度分析时间复杂度:O(n),其中 n为字符串的长度。我们只需要依次处理所有的字符,处理每个字符需要的时间为 O(1)。空间复杂度:O(1),自动机的状态只需要常数空间存储。cla.原创 2021-03-02 17:58:13 · 246 阅读 · 0 评论