LeetCode
新西兰做的饭
Here we go!
展开
-
LeetCode102:二叉树的层序遍历(BFS)
二叉树的层序遍历BFS经典的应用,值得记录下来。首先将根结点压入队列,只要队列非空就进行循环:为了按照层序输出结点,我们将当前队列长度取出,然后进行循环,这样做的目的是每次进行for循环都是将当前层取出,然后将当前层所有的儿子结点(下一层)压入队列。循环时取出值并弹出元素,当队列为空时即遍历完毕。class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { if(原创 2021-05-12 20:09:44 · 143 阅读 · 1 评论 -
LeetCode130:被围绕的区域(DFS+BFS+并查集)
被围绕的区域原创 2021-05-12 19:50:48 · 131 阅读 · 1 评论 -
LeetCode27:移除元素(数组)
移除元素题意为在原数组基础上移除值等于val的元素。首先对数组进行排序,排序后值等于val的元素就集中到了某一段中。接着我们查找到值等于val的第一个元素下标,并记录app=i然后继续向后查找统计重复的个数,直到查找到值不等于val的元素,将这个元素和之后的元素赋值给从app开始的位置(相当于减掉中间元素值和val相等的一段)。最后输出长度size-重复的个数count即为移除后数组的长度。解决代码:class Solution {public: int removeElemen原创 2021-05-08 20:37:46 · 105 阅读 · 0 评论 -
LeetCode26:删除有序数组中的重复项(数组)
删除有序数组中的重复项题目要求删除有序数组中的重复项,限制只能在原数组中操作,其实就是将数组中出现的不同数字集结到前count个,返回count的值。我们对数组进行查找,如果找到不同的数,则将其赋值到nums[count],并使count++。因为数组有序,所以置最初count=1,即从数组第二个位置开始赋值。赋值过后使i=j-1,即再次查找时从i=j开始查找,跳过了中间重复的部分,最后返回count。解决代码:class Solution {public: int removeDu原创 2021-05-08 20:25:24 · 97 阅读 · 0 评论 -
LeetCode18:四数之和(双指针)
四数之和题意为在数组中查找四个数和目标数相等,可以利用双指针进行查找。这题和LeetCode15:三数之和是同一个解题模板。若nums[i]+nums[j]+nums[left]+nums[right]<target说明四数之和过小,所以left++;若nums[i]+nums[j]+nums[left]+nums[right]>target说明四数之和过大,所以right--;如果相等则保存四个数,接着对i,j,left,right进行去重,跳过重复的元素进行查找,最终输出数组。原创 2021-05-08 19:57:11 · 121 阅读 · 0 评论 -
LeetCode16:最接近的三数之和(双指针)
最接近的三数之和题意为在数组中查找三个数之和最接近目标数,输出这三个数的值。查找三个数我们可以利用双指针解决:首先我们设置一个最小值least,并置其初始值为INT_MAX;接着进行查找,并不断更新三数之和与target的距离:我们可以利用三数之和与target中较大数-较小数来获得距离。若nums[left]+nums[right]+nums[i]>target说明三数之和过大,则right--;若nums[left]+nums[right]+nums[i]<target说明三数原创 2021-05-08 19:44:22 · 97 阅读 · 0 评论 -
LeetCode15:三数之和(双指针)
三数之和解决代码:class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { if(nums.size()<3) return {}; vector<vector<int>> sum; sort(nums.begin(),nums.end()); int left=0,原创 2021-05-08 19:28:50 · 98 阅读 · 0 评论 -
LeetCode128:最长连续序列(数组)
最长连续序列排序后遍历序列,如果满足上升就num++,最后返回num的最大值。class Solution {public: int longestConsecutive(vector<int>& nums) { sort(nums.begin(),nums.end()); int max=0; int num=0; for(int i=1;i<nums.size();i++) {原创 2021-05-02 23:57:32 · 139 阅读 · 0 评论 -
LeetCode765:情侣牵手(并查集)
情侣牵手解决代码:class Solution {public: vector<int> a; vector<int> h; void unionfind(int n) { for(int i=0;i<n;i++) { a.push_back(i); h.push_back(0); } } int find(int x)原创 2021-05-01 23:51:33 · 190 阅读 · 0 评论 -
LeetCode685:冗余连接II(并查集)
冗余连接II相比于冗余连接1把无向图换成有向图,所以需要分类讨论。有环边:测试样例:[[1,2],[2,3],[3,1]]输出:[3,1]有冲突测试样例:[[1,2],[1,3],[2,3]]输出:[2,3]显然,对于以上两种情况,只存在1.有环边无冲突2.无环边有冲突第一种情况成环的边显然是最后一个输入的边第二种情况冲突的边就是使一个节点有了第二个父亲节点的边这两种情况只需要存储那条边并输出即可。有环边有冲突测试样例:[[2,1],[3,1],[4,2],[1,原创 2021-05-01 00:27:28 · 147 阅读 · 1 评论 -
LeetCode684:冗余连接(并查集)
冗余连接提交代码:class Solution {public: vector<int >a; vector<int >h; void unionfind(int n) { for(int i=0;i<=n;i++) { a.push_back(i); h.push_back(0); } } int find(int x)原创 2021-04-29 20:16:02 · 123 阅读 · 0 评论 -
LeetCode547:省份数量(并查集)
省份数量解决代码:class Solution {public: vector<int> a; vector<int> h; int num=0; void unionfind(int n) { for(int i=0;i<n;i++) { a.push_back(i); h.push_back(0); num++;原创 2021-04-29 19:59:22 · 127 阅读 · 0 评论 -
LeetCode947:移除最多的同行或同列石头(并查集)
移除最多的同行或同列石头解决代码:class Solution {public: vector<int >a; vector<int >h; int num=0; void unionfind(int n) { for(int i=0;i<n;i++) { a.push_back(i); h.push_back(0); } }原创 2021-04-29 19:48:55 · 194 阅读 · 0 评论 -
LeetCode4:寻找两个正序数组的中位数(二分法)
class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int size=nums1.size()+nums2.size(); float a[size]; for(int i=0;i<nums1.size();i++) { a[i原创 2021-04-28 16:08:27 · 187 阅读 · 0 评论 -
LeetCode200 :岛屿数量(DFS+BFS+并查集)
LeetCode200.岛屿数量这是一道求连通块分支个数的题,是一道dfs模板题。DFSclass Solution {public: int m,n;//m行n列 bool board(int x,int y) { if((x>=0)&&(y>=0)&&(x<n)&&(y<m)) { return true; }原创 2021-04-28 15:09:12 · 273 阅读 · 0 评论 -
LeetCode11:盛水最多的容器(滑动双指针解决)
container-with-most-water提交的代码:class Solution {public: int maxArea(vector<int>& height) { int max=1; int first=0,last=height.size()-1; int cmp; while(first!=last) { if(height原创 2021-04-26 09:35:22 · 84 阅读 · 0 评论