算法题
Starting Coding
这个作者很懒,什么都没留下…
展开
-
leetcode 124. 二叉树中的最大路径和
题目思路使用深度优先搜索,使用全局变量max,分成两种情况:一种是当前遍历的节点是中间的节点,计算这个节点左右子树的节点和(左右子树必须大于0,否则赋值为0),并与max比较。第二种是这个节点只作为中间路过的节点,计算左右子树的最大值(左右子树必须大于0,否则赋值为0),然后加上当前节点值 返回。代码class Solution { int max=Integer.MIN...原创 2019-11-23 16:52:00 · 216 阅读 · 0 评论 -
leetcode986. 区间列表的交集
题目给定两个由一些闭区间组成的列表,每个区间列表都是成对不相交的,并且已经排序。返回这两个区间列表的交集。(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)解题思路1.使用双指针,比较每个指针所指区间段...原创 2019-06-25 11:48:26 · 578 阅读 · 0 评论 -
leetcode39. 组合总和
题目:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。思路:回溯+递归;为了提高效率,可以先对数组排序,然后当遇到sum>target时就直接跳出循环,因为后面的肯定都不可以了;代码中sum和candidates[i]不能提前相...原创 2019-06-12 12:51:23 · 1012 阅读 · 0 评论 -
leetcode931. 下降路径最小和
题目思路建立动态规划的dp数组dp[ i ][ j ] 代表到点(i,j)的最短距离,取每个点上一行相邻近的值,取最小值并加上A[ i ][ j ]并赋值给dp[ i ][ j ]取最后一行的最小值时间8ms代码class Solution { public int minFallingPathSum(int[][] A) { int[][] dp=n...原创 2019-07-02 15:32:34 · 165 阅读 · 0 评论 -
leetcode 667. 优美的排列 II
题目思路1.首尾各设置一个指针,再设置一个数组的指针2.从首末两端依次取值,取k个值,依次放入结果数组(k个值对应k-1个差值,且这k-1个差值均不相同)3.最后再从最后一个被取的值那里开始,以1为差值的依次存入结果数组,因为前k-1个值是从最大减去最小开始计算的,所以到了第k-1个差值时,肯定也会>1,所以加上这个1,总共就是k个不同的数时间代码class Solutio...原创 2019-07-05 14:36:53 · 262 阅读 · 0 评论 -
leetcode 1111. 有效括号的嵌套深度
题目方法一:时间4ms思路第一遍遍历求最大深度,第二遍遍历深度大于最大深度一半的赋给B,小于最大深度一半的赋给A代码class Solution { public int[] maxDepthAfterSplit(String seq) { int deep=0; int len=seq.length(); int[] ans...原创 2019-07-15 11:58:35 · 541 阅读 · 0 评论 -
leetcode 841. 钥匙和房间
题目思路个人思路是利用一个队列来存放所有钥匙,使用一个boolean型数组来计算这个房间是否被访问过,如果访问过这个房间,就进入房间把所有的钥匙放入这个队列里,如果没访问过这个房间,就不再进入这个房间存放钥匙。最后遍历数组,如果有没访问过的数组,就return false代码class Solution { public boolean canVisitAllRooms(Lis...原创 2019-07-01 12:48:13 · 300 阅读 · 0 评论 -
leetcode 1003. 检查替换后的词是否有效
题目方法一(速度最慢)思路这是我最先想到的方法,每碰到一个“abc”,就删除该“abc”,最后看看字符串长度是否为0时间875ms代码class Solution { public boolean isValid(String S) { if(!S.contains("abc")){ return false; } ...原创 2019-07-18 12:11:38 · 167 阅读 · 0 评论 -
leetcode856. 括号的分数
题目思路如下图所示,每一条直线代表一层括号,每多一层括号意味着这个数变成了原来的两倍,设一个深度deep用来表示括号的层数,每找到一个 “(” ,deep的值就增加1,同层的deep相同,如果遇到最底层的括号,也就是 “(” 的下一个就是 “)” ,结果res加上2的deep次方时间代码class Solution { public int scoreOfParenthes...原创 2019-07-12 15:02:53 · 165 阅读 · 0 评论 -
leetcode 495. 提莫攻击
题目思路使用变量end表明之前的中毒状态结束的时间,判断下一次的攻击是否在中毒状态中,分别做不同的算术时间5ms代码class Solution { public int findPoisonedDuration(int[] timeSeries, int duration) { if(timeSeries.length==0)return 0; ...原创 2019-08-05 15:47:11 · 124 阅读 · 0 评论 -
leetcode 1140. 石子游戏 II
题目思路想得到亚历克斯的最大值,那么李就要取最小值,考虑使用深度优先搜索遍历,定义函数:f(i,M)f\left ( i,M \right )f(i,M)表示piles从位置i开始到最后的以[1,2*M]为范围所能取到的最大值,使用公式f(i,M)=sum(piles[i:])−min(f(i+x,max(m,i))),1≤x≤2∗Mf\left ( i,M \right )=sum...原创 2019-08-06 15:10:46 · 244 阅读 · 0 评论 -
HackerRank之Climbing the Leaderboard题解
题目具体题目地址Climbing the Leaderboard思路好不容易通过了所有测试用例,使用单纯的暴力破解只能通过一部分用例,部分用例会超时思路,使用list列表存储所有不重复的数字,因为本身数组就排序了,所以不用排序,然后因为alice数组也是从小到大排列,所以名次肯定也是从后向前排,所以从list后面开始计算位置,并且每查找一个,就把list相应最后的一个元素删除,减少下一...原创 2019-08-19 15:12:17 · 511 阅读 · 0 评论 -
leetcode 725. 分隔链表
题目思路首先遍历节点,计算链表长度,建立数组list,记录该节点应该是一个多长的链,然后使用两个指针,一个指向当前节点一个指向上一个节点,用来断开链表,存入结果数组res时间代码class Solution { public ListNode[] splitListToParts(ListNode root, int k) { ListNode node=ro...原创 2019-08-12 15:47:57 · 180 阅读 · 0 评论 -
leetcode 655. 输出二叉树
问题思路行数 m 是树的高度,所以要先计算出树的高度列数 n 从另一个角度想,既然能够在任意两个几点位置不重复的情况下容纳下所有的节点,证明列数n的数量为以m为高度的满二叉树的所有节点的数量把List<List<String>>中所有的的元素都存为“”,然后使用深度优先搜索算法和分治法,更改里面的元素 (具体位置为首末位置的中间节点),同时设置一个deep变量,...原创 2019-09-02 14:44:20 · 295 阅读 · 0 评论 -
leetcode 740. 删除与获得点数
问题思路使用动态规划,先创建以nums数组(最大值+1)为长度的数组temp,来统计各个值出现的次数创建dp数组,给dp[1] 赋初始值 temp[1]使用公式 max(dp[i−2]+temp[i]∗i,dp[i−1])max(dp[i-2]+temp[i]*i,dp[i-1])max(dp[i−2]+temp[i]∗i,dp[i−1]) ,这个公式来判别两个相邻近的数字使用哪个作为...原创 2019-09-09 12:22:01 · 180 阅读 · 0 评论 -
leetcode 228. 汇总区间
问题思路使用两个指针,start指向本区间开始,end指向本区间结束,如果nums[i]=end+1,即属于这个区间,则区间end+1,否则加入list,注意最后一个位置的边界处理时间代码class Solution { public List<String> summaryRanges(int[] nums) { List<String&g...原创 2019-09-10 14:50:06 · 283 阅读 · 0 评论 -
763. 划分字母区间
题目:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。思路:遍历字符串 ,使用temp数组来存储每个字母的最后出现位置,然后把区间第一个字母最后出现的位置赋值给index,遍历index范围内的数组,如果之内的数组超出index范围就把这个值赋给index,直到遍历完成,把用变量i保存开始位置,用...原创 2019-06-11 15:12:20 · 309 阅读 · 0 评论 -
leetcode 893. 特殊等价字符串组
题目:你将得到一个字符串数组 A。如果经过任意次数的移动,S == T,那么两个字符串 S 和 T 是特殊等价的。一次移动包括选择两个索引 i 和 j,且 i % 2 == j % 2,交换 S[j] 和 S [i]。现在规定,A 中的特殊等价字符串组是 A 的非空子集 S,这样不在 S 中的任何字符串与 S 中的任何字符串都不是特殊等价的。返回 A 中特殊等价字符串组的数量。解法一:...原创 2019-06-03 13:52:42 · 213 阅读 · 0 评论 -
回溯算法的递归表示
算法框架:回溯法对解空间作深度优先搜索,因此,在一般情况下用递归方法实现回溯法。基本思路:若已有满足约束条件的部分解,不妨设为(x1,x2,x3,……xi),I<n,则添加x(i+1)属于s(i+2),检查 (x1,x2,……,xi,x(i+1))是否满足条件,满足了就继续添加x(i+2)、s(i+2),若所有的x(i+1)属于s(i+1)都不能得到 部分解,就去掉xi,回溯到(xi...原创 2019-04-12 15:31:50 · 478 阅读 · 0 评论 -
Leetcode 429. N叉树的层序遍历
题目:给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个 3叉树 :返回其层序遍历:[[1],[3,2,4],[5,6]]说明:树的深度不会超过 1000。树的节点总数不会超过 5000。方法一:思路:用队列实现,把每一层的Node压入队列。时间:10ms代码: public List<List<Integer>...原创 2019-03-02 13:36:17 · 698 阅读 · 0 评论 -
leetcode 326. 3的幂
问题:给定一个整数,写一个函数来判断它是否是 3 的幂次方。方法一(自己的):时间:14ms思路:递归调用自己代码public boolean isPowerOfThree(int n) { if(n==0) return false; if(n==1) return true; if(n%3==0){ n=n/3...原创 2019-02-03 11:49:11 · 98 阅读 · 0 评论 -
242. 有效的字母异位词
方法一:时间:12ms思路:把string转换为char数组,然后利用Arrays.sorts()排序,如果只是调换了顺序则char数组应该完全一样, 如果出现不一样则return false.代码 public boolean isAnagram(String s, String t) { char[] temp1=s.toCharArray(); ...原创 2019-01-31 15:20:58 · 94 阅读 · 0 评论 -
leetcode 231. 2的幂
题目给定一个整数,编写一个函数来判断它是否是 2 的幂次方。自己的方法:时间:5 ms思路:如果能整除2,则除以2,如果除到了最后为1,则认为上一个数是2,判断原数为2的幂次方class Solution { public boolean isPowerOfTwo(int n) { if(n<1)return false; whi...原创 2019-01-30 12:28:49 · 88 阅读 · 0 评论 -
leetcode 205. 同构字符串
给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = “egg”, t = “add”输出: true示例 2:输入: s = “foo”, t = “bar”输出: false示...原创 2019-01-26 22:24:31 · 183 阅读 · 0 评论 -
leetcode160 两数之和 II - 输入有序数组--解法
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], targe...原创 2019-01-16 21:34:38 · 92 阅读 · 0 评论 -
Leetcode136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4以上是原题1.我自己的解题思路,理由Arrays.sort()给数组排序,然后遍历找出(时长5-10ms)class Solution { public int singleNum...原创 2018-12-28 09:59:30 · 98 阅读 · 0 评论 -
leetcode67-二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”Java个人解法:7msclass Solution {int jinwei=0;StringBuffer sb=new Stri...原创 2018-12-17 14:29:07 · 134 阅读 · 0 评论 -
leetcode 883. 三维形体投影面积
题目:在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影。投影就像影子,将三维形体映射到一个二维平面上。在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。返回所有三个投影的总面积。...原创 2019-04-23 11:32:44 · 322 阅读 · 0 评论 -
leetcode 748. 最短完整词
题目如果单词列表(words)中的一个单词包含牌照(licensePlate)中所有的字母,那么我们称之为完整词。在所有完整词中,最短的单词我们称之为最短完整词。单词在匹配牌照中的字母时不区分大小写,比如牌照中的 “P” 依然可以匹配单词中的 “p” 字母。我们保证一定存在一个最短完整词。当有多个单词都符合最短完整词的匹配条件时取单词列表中最靠前的一个。牌照中可能包含多个相同的字符,比如...原创 2019-05-02 12:50:57 · 189 阅读 · 0 评论 -
leetcode558. 四叉树交集
题目:见leetcode 558思路:采用递归的方式,判断是否为叶子节点,如果两个都为叶子节点,则把第一个叶子节点的val值更新为两个叶子节点的或;如果第一个为叶子节点,另一个不是,如果第一个节点值为true,返回第一个节点,否则返回第二个节点,反之也是;如果两个都不是叶子节点,就递归,把第一个节点的子节点换成递归以后的返回值,如果这个节点的子节点都是叶子节点,又正好四个节点值相同,那么就把...原创 2019-05-16 11:48:44 · 257 阅读 · 0 评论 -
leetcode 1079. 活字印刷
题目:你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。个人解法:思路:利用深度优先遍历,建立一个hashset用来进行存储比对,建立一个flag的boolean型数组,用来存储这个字符是否被使用过。时间:50 ms代码:class Solution { Set<String> set=new Ha...原创 2019-06-13 11:29:31 · 1553 阅读 · 0 评论 -
leetcode1071. 字符串的最大公因子
问题对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。返回字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。思路比较暴力的去破解,先计算长度是否是公约数,从最大的公约数开始,然后计算str是否能够整除,每一次计算,都删除这一部分,如果中途有失败,就continue至外层循环的下一轮,如果没有失...原创 2019-06-07 14:17:22 · 676 阅读 · 0 评论 -
leetcode 225. 用队列实现栈,总结一点Java队列基本方法
使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 deque...原创 2019-01-28 14:29:08 · 565 阅读 · 0 评论 -
leetcode1025. 除数博弈
题目:爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与...原创 2019-04-26 10:50:19 · 383 阅读 · 0 评论