
leetcode刷题
文章平均质量分 67
不错不辍
这个作者很懒,什么都没留下…
展开
-
leetcode刷题记录0922
深度优先搜索(DFS)934、Shortest Bridge题目描述:因为是求最短距离,就会比较适合使用深度优先算法(DFS),代码如下:class Solution {public: vector<int> direction{-1,0,1,0,-1}; //主函数 int shortestBridge(vector<vector<int>>& grid) { int m=grid.size(),n=grid[原创 2021-10-04 21:50:30 · 202 阅读 · 0 评论 -
leetcode0916
79、单词搜索同样是使用之前的回溯法,不过这次是修改标志位,代码如下(使用递归实现):class Solution {public: bool exist(vector<vector<char>>& board, string word) { if(board.empty())return false; int m=board.size(),n=board[0].size(); vector<vector&原创 2021-09-20 20:27:18 · 203 阅读 · 0 评论 -
leetcode刷题笔记0914
Leetcode刷题笔记0914547、省份数量题目描述:简单来说,就是找一个图结构中一共有多少联通区域,若有很多个节点相互连接,那就是一个省份,若一个节点不与其他节点连接,那这一个节点就单独是一个省份;这道题和之前求岛屿最大面积的题目非常相似;主要思路就是按节点搜索这张图(每一行就代表一个节点),知道这个节点与哪些节点相连后,搜索与这些节点相连的其他节点,简单来说就是搜索这个节点所直接/间接相连的所有节点,并修改visited的值,避免重复搜索,然后++count,最后返回即可;递归的方法可原创 2021-09-14 19:32:22 · 179 阅读 · 0 评论 -
leetcode题解0908
leetcode题解0908今天主要是跟排序相关的题目:215、数组中第k大的数字(Kth Largest Element in an Array)最坏的做法就是先用C++中的快速排序对数组中的所有元素进行排序,然后选择第K大的元素即可,时间复杂度为:O(nlog2nnlog_2nnlog2n)(平均情况,快排的时间复杂度)class Solution {public: int findKthLargest(vector<int>& nums, int k) {原创 2021-09-08 23:03:24 · 122 阅读 · 0 评论 -
leetcode解题
142.环形链表Ⅱ题目描述:题解:链表的题目需要使用到快慢指针,对是否存在链表是相当好判定的,为快慢指针设置不相等的步幅,如果存在环形链表,两个指针一定可以相遇;对环形链表起始元素的判定,需要一些数学上的证明:首先可以证明,慢指针没有走完1整圈时,一定可以被快指针追到并相遇;因为慢指针是从环形链表的入口进入环形的;快指针此时在环形中的某个位置,当慢指针再次回到起始点前一定可以被快指针追上;然后可以用数学证明,当快慢指针相遇后,再将快指针移动到head,两个指针再走一次,相遇的位置就是环形的入原创 2021-09-08 18:13:15 · 145 阅读 · 0 评论 -
2021-08-17
排序专题今天来总结一下排序相关的各种知识,并且实现:快速排序:C++中可以使用std::sort()进行快速排序,但是最好还是要知道其中的原理和实现细节:代码如下:void quick_sort(vector<int>&nums,int l,int r){//左指针和右指针 if(l+1>=r){ return; } int first=l,last=r-1,key=nums[first];//first指针和last指针、key是原创 2021-08-17 21:25:38 · 102 阅读 · 0 评论 -
leetcode解题系列(12)
69.x的平方根题目描述:方法一:二分查找:class Solution {public: int mySqrt(int x) { int l = 0, r = x, ans = -1; while (l <= r) { int mid = l + (r - l) / 2; if ((long long)mid * mid <= x) { ans = mid;原创 2021-08-11 21:36:30 · 155 阅读 · 0 评论 -
leetcode解题系列(11)
leetcode解题系列(11)双指针双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。88、合并两个有序数组题目描述:解题思路:这里用到了三个指针,m和n可以作为比较定位指针,可以另外新添一个pos指针用于指向添加元素的位置,具体原创 2021-07-28 16:42:53 · 158 阅读 · 0 评论 -
leetcode解析系列(十)
455.分配饼干思路:贪心算法;每次都考虑饥饿度最小的孩子,然后依次从最小的饼干出发,考虑是否可以满足;代码:class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { int cnt=0; sort(g.begin(),g.end()); sort(s.begin(),s.end());原创 2021-07-17 21:29:57 · 103 阅读 · 0 评论 -
leetcode解题系列(九)
leetcode解题系列(九)1122、数组的相对排序题目描述:最简单想到的方法自然是:用一个指针pointer指向arr2,然后依次在arr1中搜索指针指向的元素个数,再将特定数目的元素加入res数组,最后返回res即可...原创 2021-05-17 16:45:22 · 140 阅读 · 0 评论 -
leetcode解题系列(八)
leetcode解题系列(八)继续学习!136.只出现一次的数字这是一道看上去非常简单的题目,如果可以使用count函数就可以直接遍历一遍所有元素然后当值为1时直接返回…原创 2021-05-12 17:03:46 · 158 阅读 · 0 评论 -
leetcode解题系列(七)
leetcode解题系列(七)继续坚持!169、多数元素题目描述:最简单的方法可以先用一个数组保存前(n/2+1)元素的出现次数(多数元素一定出现),然后再求这个数组中的最大值对应的元素即可。复杂度分析:时间O(n^2),空间O(n)但是这样不能满足时间要求,进行了一定修改,只有元素第一次出现才count,否则就直接next,节省了很多时间。代码如下:class Solution {public: int majorityElement(vector<int>&原创 2021-05-10 13:43:50 · 153 阅读 · 0 评论 -
leetcode解题系列(六)
leetcode解题系列(六)找到一点感觉了,每天坚持好三道题的量,多想想思路,自己动手再写一下代码,坚持就是胜利。5750 人口最多的年份题目描述:给你一个二维整数数组 logs ,其中每个 logs[i] = [birthi, deathi] 表示第 i 个人的出生和死亡年份。年份 x 的 人口 定义为这一年期间活着的人的数目。第 i 个人被计入年份 x 的人口需要满足:x 在闭区间 [birthi, deathi - 1] 内。注意,人不应当计入他们死亡当年的人口中。返回 人口最多 且 最原创 2021-05-09 16:46:24 · 210 阅读 · 0 评论 -
Leetcode解题系列(4)
Leetcode解题系列(4)225 用队列实现栈题目描述:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to原创 2021-04-02 11:20:11 · 142 阅读 · 0 评论 -
Leetcode解题系列(3)
leetcode解题系列(3)141 环形链表题目叙述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。 如果pos是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true。否则,返回false 。思路: 遇到链表的问题,首先想到的就是双指针的方法是否可以解决:对于这道原创 2021-04-01 15:48:29 · 111 阅读 · 0 评论 -
Leetcode解题记录系列(2)
Leetcode解题记录系列(2)121、买卖股票的最佳时机**题目描述:**给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。暴力解法:首先定义一个变量代表我们的最大利润 maxprofit。然后通过第一次循环,获取股票第一天到倒数第二天的价格。因为原创 2021-03-12 21:29:54 · 110 阅读 · 0 评论 -
Leetcode解题记录系列(1)
leetcode解题记录(1)简单记录leetcode刷题过程。1、两数之和**题目描述:**给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。C++暴力解法:class Solution{ public: vector<int> twoSum(vector<int>&原创 2021-03-08 16:34:53 · 80 阅读 · 0 评论 -
leetcode解题系列(五)
leetcode解题系列(五)剑指offer09:用两个栈实现队列题目描述:复习一下:栈和队列都是线性表,不过是进出元素的顺序逻辑不相同;对于栈,就像压子弹一样,先进后出;队列是先进先出,元素从尾部进入,从头部取出元素;比较容易想到的方法就是维护两个栈1,栈2;每当向队列存入一个数字的时候,先进栈1,若需要进行出队列操作时,就将栈1 的元素依次出栈,并按顺序入栈2,再对栈2进行常规的出栈操作,接下来又要将栈2出栈,进入栈1,进行入队列的操作。举个例子:向空队列存入1,2,3,4这4个数字,他原创 2021-05-08 16:33:01 · 164 阅读 · 0 评论