力扣
力扣算法题
WKP9418
愿有一天开怀大笑
展开
-
3. 无重复字符的最长子串
之前写的第一印象是dp,不行。然后想到了滑动窗口,但最后只能用arraylis来实现。。class Solution { public int lengthOfLongestSubstring(String s) { //if(s.length()==0) return 0; ArrayList list=new ArrayList<Character>(); int maxlen=0; int ans=0;原创 2020-09-29 20:01:42 · 166 阅读 · 0 评论 -
2.两数之和
第一眼就是,两个链表怎么结束呢?要一个一个判断吗?class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = new ListNode(0); ListNode h=head; int a=0;//保存进位的数字,为1或者0 while (l1!=null||l2!=null){ int .原创 2020-09-26 19:50:48 · 191 阅读 · 0 评论 -
5.最长回文串
四种方法,必须掌握前3种原创 2020-09-08 17:31:03 · 135 阅读 · 0 评论 -
不使用乘法、除法或mod,实现两数相除
保证数据在int范围。被除数÷除数=商+余数需要注意的问题:int 的范围是[-2^31,2^31-1],也就是【-2147483648,2147483647】,如果-2147483648/-1结果会超出int 范围。除法,乘法和mod都不能使用,那可以使用加减,移位。只需保留商即可解法一:每次自增除数当然被除数减去除数也可以。如 10/3,除数自增,10在【3+3+3,3+3+3+3】范围里面。如果被除数取得很大,除数取得很小,那么会很慢。(二者同号情况下)class Soluti原创 2020-07-01 23:38:46 · 1255 阅读 · 0 评论 -
96.不同的二叉搜索树
思考过程:1.能不能递归求出所有的二叉搜索树呢?2.相邻的答案之间有没有规律呢?3.找不到规律,但找出了每一个答案下的所有结果4.看题解,才明白。。下次做DP题目也这么思考,先看递归否,再找怎么由之前的答案推出现在的答案来。ans[n]为所求答案,也就是节点数为n时,有多少二叉搜索树。f(i)是以i为根节点的二叉搜索树的个数,左子树有i-1个元素,右子树有n-i个元素。所以f(i)=ans[i-1]*ans[n-i],左子树有ans[i-1]个可能,所以要相乘。class Solut.原创 2020-06-10 09:51:44 · 129 阅读 · 0 评论 -
63.不同的路径II
不是很难。初始化时想了想在转移时要判断当前有没有障碍物,有的话就是0;没有的话才可以路径相加。class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int dp[][]=new int[obstacleGrid.length][obstacleGrid[0].length]; if(obstacleGrid[0][0]==0) dp[0][0]=1; .原创 2020-05-16 15:58:31 · 140 阅读 · 0 评论 -
62.不同的路径
还记得高中的时候,美女老师讲过这题。但当时没听懂。现在也只能补补遗憾了。定义状态比较简单,就是走到每个方格处的位置。dp[i][j]表示走到i行,j列一共有多少方法转移也比较简单。题目说只能下,右行走,所以到达(i,j)处,可以由两个状态达到。class Solution { public int uniquePaths(int m, int n) { int dp[][]=new int[m][n]; for(int i=0;i<m;i+..原创 2020-05-15 14:17:29 · 120 阅读 · 0 评论 -
5.最长回文子串
中心扩展法取一位置,看他的左右两边。因为存在“aa”类似情况,所以先分别扫描左右两边,排除这种偶数的情况再左右两边一起扫描对每个位置都要执行,所以要保存最大的长度时间复杂度为O(n^2)class Solution { public String longestPalindrome(String s) { if(s.length()==0) return s; int len=1; int left=0,right=0; .原创 2020-05-15 13:56:23 · 140 阅读 · 1 评论 -
198.打家劫舍
1.定义状态dp[i]: 小偷在第i个房子做完决策后,拥有的所有钱财2. 状态转移那么到底第i个房子小偷偷不偷呢?偷。那么他一定不能偷第i-1个,只能在i-2的基础上增加钱财。即dp[i-2]+prices[i]不偷。那么钱数没有增加,还是dp[i-1]二者取最大,dp[i]=max(dp[i-1],dp[i-2]+prices[i]) int rob(vector<...原创 2020-04-12 17:22:22 · 163 阅读 · 0 评论 -
121.买卖股票的最佳时机
DP我们不能预测未来,只知道历史的股票价格。还好,本题只是计算一下最高利润。第i天时,那我们找到历史(i天及以前)最低价格,对以后的价格依次减去历史最低价即可。需要动态维护这个历史最低价格。 int maxProfit(vector<int>& prices) { if(prices.empty()) return NULL; int...原创 2020-04-12 16:06:27 · 157 阅读 · 0 评论 -
70.爬楼梯
1.递归解法模拟走楼梯即可。从第一节楼梯走到第N节楼梯 int climbStairs(int n) { int ans=0; dfs(n,ans,0); return ans; } void dfs(int n,int& ans,int i){ if(i==n){ ans++;...原创 2020-04-12 13:56:02 · 116 阅读 · 0 评论 -
1219.黄金矿工
嗯,就是个递归完事了。判断结束条件:周围都是0。所以呢按着这个思路,先判断周围有没有数字,然后判断是不是0.是0,走下一个方向;不是零,递归。最终一定会存在周围都是0的情况,这时判断最大值。class Solution {public: int max_=0; int px[4]={0,0,-1,1}; int py[4]={1,-1,0,0}; int ...原创 2020-04-06 16:12:18 · 220 阅读 · 1 评论 -
51.n皇后
看到返回结果就蒙了。这啥??看了看返回结果vector<vector<string>>二维数组,每个元素是一个string。每个元素是一个答案的某一行的放置详情。这个二维数组的第一行是一个答案,第二行又是一个答案。 vector<vector<string>>ans; vector<vector<string&...原创 2020-04-06 12:46:59 · 133 阅读 · 2 评论 -
79.单词搜索
思路:先在表里面找到第一个单词,然后递归查找之后的单词。class Solution {public: int flag=0; int px[4]={0,0,1,-1}; int py[4]={1,-1,0,0}; bool ans=false; bool exist(vector<vector<char>>& bo...原创 2020-04-01 13:17:24 · 115 阅读 · 1 评论 -
77.组合
这里有个剪枝记录下。i<=n-k+1比如n=13,k=4,选了一个数之后,i最大是11,可选[11,12,13]选了两个数之后,i最大为12,可选[12,13]选了三个数之后,i最大为13,可选[13]所以不用循环到n.这里max(i)+再选几个数字=n+1所以,max(i)=n-1-再选几个数字我们用k代表再选几个数字。class Solution {publi...原创 2020-03-31 18:11:19 · 522 阅读 · 0 评论 -
60.第K个排列
第一次用k来结束,超时第二次简化了一下,时间太长了。一看题解发现这题不简单。class Solution {public: int flag[10]={0}; int mapp[10]={0,1,2,6,24,120,720,5040,40320,362880}; string getPermutation(int n, int k) { string...原创 2020-03-31 13:41:44 · 124 阅读 · 0 评论 -
22.括号生成
第一眼看懵,感觉这个左右括号很麻烦。放了两天。在纸上写了写,发现没想的那么难,才开始写的。思路:按照这个树写出了递归。结果发现存在错误组合的情况,想到了正确情况下左括号的数量>=右括号,因为先有左才有右。 vector<string> generateParenthesis(int n) { vector<string>ans; ...原创 2020-03-28 19:11:34 · 162 阅读 · 0 评论 -
40.全排列Ⅱ
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200328155015487.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMTc5NDI4,size_16,color_FFFFFF,t...原创 2020-03-28 16:34:33 · 152 阅读 · 0 评论 -
46.全排列
标记下标即可,看是否用过。 vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> ans; vector<int>flag(nums.size(),0); vector<in...原创 2020-03-26 13:10:42 · 102 阅读 · 0 评论 -
40.组合数Ⅱ
错误代码:ans没有去重 vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { vector<vector<int>> ans; vector<int>tep; dfs(a...原创 2020-03-25 18:12:58 · 158 阅读 · 0 评论 -
39.组合总分
数字可以重复选,如 上面的示例二,我们先把以2开头的全部选完,在选以3开头的。这样保证了结果中没有重复的(如2,3,3和 3,2,3)参数k来控制选数的时候只能从本身或者下一个数选。class Solution {public: vector<vector<int>> combinationSum(vector<int>& candid...原创 2020-03-25 11:34:03 · 178 阅读 · 0 评论 -
17.电话号码的组合
我怎么也没想到,他还能打一样的。输入的数字的顺序能变,开始在dfs循环时,i总是从0开始;输入的数字的顺序不能变,开始在dfs循环时,i要从自己设定的一个变量p开始。比如输入2,3。当我们循环到 3 ,_时,由于不能从0开始循环,所以2填不进去。当事人考虑到了2,写的错误代码:int flag_num[200]={0}; int flag_char[200]={0};...原创 2020-03-23 14:47:26 · 260 阅读 · 0 评论 -
401.二进制手表
例如,上面的二进制手表读取 “3:25”。给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。案例:输入: n = 1返回: [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, “0:02”, “0:04”, “0:08”, “0:16”, “0:32”]不会。但由此写了个类似组合的代码。...原创 2020-03-23 09:57:27 · 139 阅读 · 0 评论 -
784.字母大小写全排列
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入: S = “a1b2”输出: [“a1b2”, “a1B2”, “A1b2”, “A1B2”]输入: S = “3z4”输出: [“3z4”, “3Z4”]输入: S = “12345”输出: [“12345”]class Solution {public...原创 2020-03-22 20:38:39 · 153 阅读 · 0 评论 -
542.01矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000。给定矩阵中至少有一个元素是 0。矩阵中...原创 2020-02-20 20:24:11 · 306 阅读 · 0 评论 -
695.岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,...原创 2020-02-15 13:27:13 · 125 阅读 · 0 评论 -
面试题 16.19.水域大小
题目很正常,思路也简单。思路:每个点都要循环一遍。如果是0,递归且把走过的路径置为1。当时有个坑,是不知道计数要怎么计数。当时在dfs()函数最后一行写到原创 2020-02-15 12:15:53 · 2461 阅读 · 0 评论 -
638.大礼包
这题咋说呢,虽然写了一个小时左右,但还真是中等里面独立思考和完成的一道题。赶紧写一下此题的思路形成:原创 2020-02-14 14:17:52 · 641 阅读 · 5 评论 -
133.克隆图
把图克隆一下。写的很差。用 void dfs()写的。第一次无法结束,,第二次答案不对。。果断看题解。递归还是停留在初级的阶段,还需要自己人工递归才能了解正确与否。 unordered_map<Node*,Node*>mapp; Node* cloneGraph(Node* node) { if(node==NULL) return NULL; ...原创 2020-02-12 19:28:35 · 103 阅读 · 0 评论 -
200.岛屿的数量
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3来源:力扣(LeetCode)此题和被围绕的区域有相似...原创 2020-02-12 00:05:42 · 218 阅读 · 0 评论 -
130.被围绕的区域
给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X...原创 2020-02-11 22:32:57 · 140 阅读 · 0 评论 -
113.路径总和Ⅱ
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:...原创 2020-02-11 11:43:54 · 120 阅读 · 0 评论 -
872.叶子相似的树
请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。提示:给定的两颗树可能会有 1 到 100...原创 2020-02-10 15:24:27 · 122 阅读 · 0 评论 -
257.二叉树的所有路径
打印出所有从根到叶子的路径格式:1->5->5 vector<string>ans; vector<string> binaryTreePaths(TreeNode* root) { string tep; dfs(root,tep); return ans; } ...原创 2020-02-10 14:33:07 · 116 阅读 · 0 评论 -
733.图像渲染(主讲题意)
????题目大意:首先,你别看输入输出样例。越看越懵,,有一幅图画,上面有各种颜色(用数字0-65535表示不同颜色)。像素就是二维坐标。通过坐标可以知道该像素是啥颜色。然后给你一个坐标(sr,sc)和一个替换颜色newColor。(sr,sc)本身的颜色我们记为color.要求你从(sr,sc)开始,遍历上下左右相邻的像素点,如果相邻的像素点的颜色是color,则把他改为替换颜色newColor.循环。。。。原创 2020-02-10 13:40:21 · 186 阅读 · 0 评论 -
690.员工的重要性
给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中。...原创 2020-02-09 21:38:26 · 183 阅读 · 0 评论 -
559.N叉树的最大深度
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个 3叉树 :我们应返回其最大深度,3。说明:树的深度不会超过 1000。树的节点总不会超过 5000。来源:力扣(LeetCode) int maxDepth(Node* root) { if(root==NULL) return 0;//可能连根都没有...原创 2020-02-09 17:38:16 · 252 阅读 · 0 评论 -
112.路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 ...原创 2020-02-09 16:27:54 · 115 阅读 · 0 评论 -
110.平衡二叉树
判断是否是平衡二叉树。1.判断是否是平衡二叉树2.左子树、右子树是平衡二叉树,并且二者高度差<=1所以递归就写出来了 bool isBalanced(TreeNode* root) { if(root==NULL) return true; int left=DFS(root->left); int right=DFS(root-...原创 2020-02-09 15:23:16 · 113 阅读 · 0 评论 -
108.将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5...原创 2020-02-09 12:26:24 · 104 阅读 · 0 评论