![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
晓风轻飏丶
这个作者很懒,什么都没留下…
展开
-
LeetCode5 最长回文子串
最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 暴力解法 /** * 暴力解法 * @param s * @return */ public static String longestPalindrome(String s) { if (s.length()<2){ return s; } char[] chars = s.toCharArray();原创 2021-03-19 16:41:45 · 90 阅读 · 0 评论 -
LeetCode63 不同路径 II
63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 解 依旧是一道简单的冻龟题 可以先看 不同路径 的解题思路 此题在其基础上仅仅是初态的设置不同 以及把障碍物所在的格子的路径数变为0就好了 public static int uniquePathsWithObsta原创 2021-03-19 16:39:12 · 107 阅读 · 0 评论 -
LeetCode62 不同路径
62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 解 简单的动态规划题 f(m,n) = f(m-1,n) + f(m,n-1) 其中但m=0和当n=0时 路径条数为1 public static int uniquePaths(int m, int n) { int[][] arr = new原创 2021-03-18 17:17:44 · 79 阅读 · 0 评论 -
LeetCode42 接雨水
42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 解法思路 解法一 先创建两个预数组 一个存当前指针左边最大值 一个存当前指针右边最大值 然后计算每格上面的水分 public static int maxArea(int[] height) { // 每一个上面都是取 MIN(左边最大,右边最大) - 自己 负数取0 // 创建左最大数组 和 右最大数组 int[] left = new i原创 2021-03-18 00:56:28 · 39 阅读 · 0 评论 -
LeetCode36 有效的数独
36. 有效的数独 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 上图是一个部分填充的有效的数独。 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。 解: 版本一 先上一个晦气版本 哈哈 public boolean isValidSudoku(char[][] board) { char原创 2021-03-17 17:28:03 · 61 阅读 · 0 评论 -
LeetCode70 爬楼梯
70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 题解: 该题最先想到的肯定是递归 (ps: leetcode上这样写45这个用例会超时) 方法一 首先我们可以知道 爬一阶有1种方法 爬两阶有2种方法 爬三阶有以下两情况 先爬一阶 剩2个阶梯 先爬两阶 剩1个阶梯 所以f(3) = f(2) + f(1) 同理 爬n阶有以下两情况 先爬一阶 剩n-1个阶梯 先爬两阶 剩n-2个原创 2021-03-15 21:55:30 · 62 阅读 · 0 评论 -
LeetCode34 在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 题解: 这道题我写的太恶心了 我自己都看不下去了 重点在getIndex方法那里 三个参数 前两个参数和searchRange一样 后面用来确定是获取开始还是结束 由于该题不是直接查找目标值 而是需原创 2021-03-15 21:25:37 · 72 阅读 · 0 评论 -
LeetCode66 加一
题解 方法一: 自己第一遍想的 代码可读性较差 思维也没有放开 class Solution { public static int[] plusOne(int[] digits) { int length = digits.length; if (digits[length - 1] < 9) { digits[length - 1] += 1; return digits; }原创 2021-03-15 20:50:22 · 76 阅读 · 0 评论 -
LeetCode53 最大子序和
53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 ps:这题是看题解做的 动态规划还是需要练啊 public int maxSubArray(int[] nums) { int pre =0; int res = nums[0]; for (int x : nums) { // 判断x之前的数据是否为负数 pre = Math原创 2021-03-15 20:45:20 · 40 阅读 · 0 评论 -
LeetCode69 x 的平方根
69. x 的平方根 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 需要注意的点 显然这道题最容易想到的方法就是二分法 但由于存在 判断需要用到 平方 所以我们必须处理类型溢出的问题 方法就是在平方的时候转换为long类型 public static int mySqrt(int x) { // 考虑采用 二分法 int low = 0;原创 2021-03-15 20:42:46 · 56 阅读 · 0 评论 -
LeetCode29 两数相除
29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 解题思路 我只能说 要考虑类型溢出的题是真的噩梦 每次都要错几回 没什么好说的思路 就是用除数每次 *2 一直到结果大于被除数 然后再用 (被除数原创 2021-03-14 23:08:39 · 44 阅读 · 0 评论 -
LeetCode33 搜索旋转排序数组
33. 搜索旋转排序数组 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。 给你 旋转后 的数组原创 2021-03-14 22:02:53 · 118 阅读 · 0 评论 -
LeetCode22 括号生成
22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 public static List<String> generateParenthesis(int n) { List<String> brackets = new ArrayList<>(); getBrackets(n,n,"",brackets); return brackets; }原创 2021-03-13 21:40:19 · 62 阅读 · 0 评论 -
LeetCode21 合并两个有序链表
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 /** * 普通解法 * @param l1 * @param l2 * @return */ public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode headPre = new ListNode(); if (l1 =原创 2021-03-13 20:50:27 · 57 阅读 · 0 评论 -
LeetCode19 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 解法 快慢指针 public ListNode removeNthFromEnd(ListNode head, int n) { if (head == null){ return null; } ListNode fast = head; ListNode slow =原创 2021-03-10 10:15:01 · 45 阅读 · 0 评论 -
LeetCode14. 最长公共前缀
14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 解题重点 最长公共前缀一定不会比最短字符串长 所以我们可以找到最短的字符串(只需要长度 不需要字符串) 写一个方法来判断一个字符串是不是公共前缀 时间复杂度 O(m*n) m:字符串总长度 n:字符串个数 我们只需要在最短的字符串里进行二分查找 一直匹配到不再是公共前缀 public static String longestCommonPrefix(String[] strs原创 2021-03-09 21:05:19 · 55 阅读 · 0 评论 -
LeetCode172 阶乘后的零
172. 阶乘后的零 给定一个整数 n,返回 n! 结果尾数中零的数量。 解法 参考题解的 思路无敌 膜拜大佬 本题核心问题在于求出乘数中5的个数 5 10 15这些比较简单 n/5 就能获得 但像25 50 75 125 这些 会包含多个5 该解法用递归来解决此问题 public static int trailingZeroes(int n) { return n<5?0:n/5 + trailingZeroes(n/5); } ...原创 2021-03-09 13:11:03 · 45 阅读 · 0 评论 -
LeetCode15 三数之和
15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 解题思想 : 要求不重复 首先想到寻找特殊值来确定 如最小值/最大值不同 则不同, 所以我们把数组排序 由于数组从小到大 所以我们确定一个最小值 然后用双指针来确定其他两个值 L = minIndex+1 R = length-1 为了结果不重复 我们在移动指针的时候还要考虑重复原创 2021-03-06 16:21:58 · 47 阅读 · 0 评论