路径总和Ⅲ DFS
摘要:对每个节点进行深搜,当然了没到叶子节点就得到结果的话还要继续往下搜因为还有可能组成另一条路径。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *
阅读全文
494目标和 DFS回溯 +dp
摘要:class Solution { public: int res=0; int findTargetSumWays(vector<int>& nums, int target) { DFS(nums,target,0,0); return res; } void DFS(vector<int>& n
阅读全文
二叉树的序列化与反序列化
摘要:序列化时将空指针也记录下来了,所以在反序列化的时候即使只有前序或者后序的序列也都可以递归出树来。因为遇到序列中的null就会return,可以区分开左右树。如果没记录空那么只有单独的前序或者后序是不能构造出树来的。 /** * Definition for a binary tree node. *
阅读全文
287 寻找重复数字(找环的入口,分桶,set,快排然后找相邻相等的)
摘要:建图: 举个例子:nums = [2,5, 9 ,6,9,3,8, 9 ,7,1],构造成链表就是:2->[9]->1->5->3->6->8->7->[9],也就是在[9]处循环。 按这种方式建好图那么有重复元素必然会有环,而target就是环的入口处 class Solution { publi
阅读全文
搜索二维矩阵 240
摘要:方法二:二分法搜索 矩阵已经排过序,就需要使用二分法搜索以加快我们的算法。 算法: 首先,我们确保矩阵不为空。那么,如果我们迭代矩阵对角线,从当前元素对列和行搜索,我们可以保持从当前 (row,col)(row,col) 对开始的行和列为已排序。 因此,我们总是可以二分搜索这些行和列切片。我们以如下
阅读全文
238 除自身以外数组的乘积 左右乘积数组
摘要:算法 初始化两个空数组 L 和 R。对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积。 我们需要用两个循环来填充 L 和 R 数组的值。对于数组 L,L[0] 应该是 1,因为第一个元素的左边没有元素。对于其他元素:L[i] = L[i-1]
阅读全文
160 相交链表
摘要:指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历 如果 pA 到了末尾,则 pA = headB 继续遍历 如果 pB 到了末尾,则 pB = headA 继续遍历 比较长的链表指针指向较短链表head时,长度差就消除了 如此,只需要将最短链表遍历两次即可找到位置 作者:real
阅读全文
152乘积最大子数组 dp
摘要:最大子数组和的状态转移方程是dp[i]=max(dp[i-1]+nums[i],nums[i]) 其中dp[i]表示以nums[i]结尾的最大子数组的和。所以以nums[i]结尾的最大子数组和无非就是要么加入前边的要么单独自己。 但是乘积最大子数组不满足这样的转移方程 dp[i]不一定是由dp[i-
阅读全文
leetcode 739 每日温度 单调栈
摘要:class Solution { public: vector<int> dailyTemperatures(vector<int>& temperatures) { int n=temperatures.size(); vector<int> res(n,0); stack<int> s; //从
阅读全文
543求二叉树的直径
摘要:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), rig
阅读全文
leetcode 148 链表排序的归并排序和插入排序
摘要:### 解题思路 此处撰写解题思路 ### 代码 ```cpp /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(
阅读全文
102 二叉树层序遍历(一下出一层的广搜和DFS)
摘要:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), rig
阅读全文
139 单词拆分 dp
摘要:dp[i]表示[0,...i-1]是否是合法字符串,因为dp[i]的状态不只是由dp[i-1]决定的,而是前边每个地方都有可能成为断点,只要有一个结果是true,则结果就是true,所以对于每个dp[i]遍历其之前的每个断点 class Solution { public: bool wordBre
阅读全文
48 旋转图像 水平翻转然后主对角线翻转即可实现顺时针旋转90°
摘要:leetcode官方题解 class Solution { public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); // 水平翻转 到行的一半即可 for (int i = 0; i < n / 2; ++i
阅读全文
31下一个排列
摘要:算法推导如何得到这样的排列顺序?这是本文的重点。我们可以这样来分析: 我们希望下一个数比当前数大,这样才满足“下一个排列”的定义。因此只需要将后面的「大数」与前面的「小数」交换,就能得到一个更大的数。比如 123456,将 5 和 6 交换就能得到一个更大的数 123465。我们还希望下一个数增加的
阅读全文
最长连续序列
摘要:class Solution { public: int longestConsecutive(vector<int>& nums) { //记录nums中的数字是否出现 unordered_set<int> s; for(auto i:nums) { s.insert(i); } int res=
阅读全文
三数之和 双指针
摘要:class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { //排序后 对于每个nums[i],用双指针从nums[i]后面求是否有两个数的和等于-nums[i] //因为为了去重所以需要从nums[i]之后双
阅读全文
加油站
摘要:class Solution { public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int sum=0; int start=0; int minsum=INT_MAX; //从0开始求sum,最低点小于0是不
阅读全文
N皇后
摘要:class Solution { public: vector<vector<string>> res; vector<vector<string>> solveNQueens(int n) { vector<string> track; string s=""; for(int i=0;i<n;i
阅读全文
水域大小
摘要:class Solution { public: vector<int> res; vector<int> pondSizes(vector<vector<int>>& land) { vector<vector<bool>> visit(land.size(),vector<bool>(land[
阅读全文
1221 分割平衡字符串
摘要:class Solution { public: int balancedStringSplit(string s) { int r=0; int res=0; for(int i=0;i<s.size();i++) { if(s[i]=='R') r++; else if(s[i]=='L') r
阅读全文
1391 检查是否存在有效路径 DFS
摘要:class Solution { public: bool res=false; bool hasValidPath(vector<vector<int>>& grid) { vector<vector<bool>> visit(grid.size(),vector<bool>(grid[0].si
阅读全文
盛最多水的容器11 双指针
摘要:class Solution { //两个指针分别指向左右两端,每次值小的前进,因为值大的前进的话永远比不过之前的结果,所以值小的那个不能作为边界了,值小的前移 public: int maxArea(vector<int>& height) { int l = 0, r = height.size
阅读全文