LeetCode
文章平均质量分 75
FiveWords
努力变强!
展开
-
leetcode每日一题-水壶问题
题目描述有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空题目分析该题可使用数学方法求解,我们每一次操作只能倒满x,y或者清空x,y,若干次操作之后得到z,那么我们可...原创 2020-03-21 13:02:20 · 743 阅读 · 0 评论 -
leetcode21-合并两个有序链表
题目描述使用一个头指针,改变两条链表的指向就可以使用O(1)的空间复杂度解决这个问题。Java代码public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode head = new ListNode(0); ListNode p = head; while(l1!=null...原创 2020-03-15 20:38:27 · 113 阅读 · 0 评论 -
leetcode20-有效括号
题目描述模拟栈,注意栈空的情况Java代码public boolean isValid(String s) { Map<Character,Character> map = new HashMap<>(){{ put('(',')'); put('{','}'); put('[',...原创 2020-03-15 18:35:33 · 116 阅读 · 0 评论 -
leetcode每日一题-岛屿的最大面积
题目分析dfs即可,但是主要要使用沉岛思想(访问过的陆地变成水域,1变为0)java代码public int maxAreaOfIsland(int[][] grid) { if(grid==null || grid.length==0){ return 0; } int ret = 0; for(int...原创 2020-03-15 18:21:41 · 248 阅读 · 1 评论 -
leetcode-19 删除链表的倒数第N个节点
#题目描述1.先遍历一遍,计算链表长度,那么倒数k,就可以转化为整数n-k+1,那么找到n-k节点就是删除节点的前一个节点2.双指针,头指针前进k,尾指针开始前进,保持gap,那么头指针为空,尾指针就是删除节点的前一个节点java代码1public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dumm...原创 2020-03-14 21:31:53 · 107 阅读 · 0 评论 -
leetcode-18-四数之和
题目描述该题与三数之和相同,在外嵌一层循环即可,但是这个题目容易超时,需要在第一和第二层循环判断最大值和最小值与target的关系,来减少循环次数。Java代码public List<List<Integer>> fourSum(int[] nums,int target){ /*定义一个返回值*/ List<List<In...原创 2020-03-14 21:16:23 · 73 阅读 · 0 评论 -
leetcode每日一题- 最长上升子序列
题目分析一这个题目有两种解法,我们先来讨论最常见的动态规划的解法,我们用dp[i]表示i位置下最长的子序列的长度,那么在已知dp[0…i-1]的前提下,只要遍历前面的数组,找到num[i]>num[k] and max{dp[k]+1,dp[i]},k属于[0,i).用公式表示如下:dp[i]=max(dp[k]+1,dp[i]),k∈[0,i)&num[k]<num[i]...原创 2020-03-14 14:53:02 · 121 阅读 · 0 评论 -
leetcode-17- 数字号码的字母组合
题目分析使用递归调用的方式进行遍历,那么递归的规律是什么呢?要将字符串扩展,我们必须拿出一个数字然后将数字代表的字母添加到字符串之后,那么每拿出一个数字,我们将要添加3-4次循环,每次循环一个字母进原字符串,那么答案也就出来了。java代码Map<String,String> phone = new HashMap<String,String>(){{ ...原创 2020-03-13 22:03:54 · 534 阅读 · 0 评论 -
leetcode每日一题 - 多数元素
题目分析只要一个元素的数量多于其他元素,那么在“对对碰”环节一定会生存下来这个题目一定有解,如果没有解的情况,需要使用time在进行一次判断如果是三个元素,就使用两个标志Java代码public int majorityElement(int[] nums) { int time = 1; int number = nums[0]; f...原创 2020-03-13 19:46:17 · 104 阅读 · 0 评论 -
leetcode每日一题 - 字符串的最大公因子
题目分析需要知道一个性质:如果 str1 和 str2 拼接后等于 str2和 str1 拼接起来的字符串(注意拼接顺序不同),那么一定存在符合条件的字符串 X。那么str由str1和str2产生,属于他们的子字符串,那么可以求str1和str2长度的最大公因子来获取这个子字符串。Java代码public String gcdOfStrings(String str1, String st...原创 2020-03-12 19:40:03 · 111 阅读 · 0 评论 -
leetcode每日一题 -将数组分为和相等的三个部分
题目分析和不被3整除的一定不行和可以被3整除的,有两个数组相等=sum/3,并且数组元素还有剩余即可其余均不符合Java代码public boolean canThreePartsEqualSum(int[] A) { int sum = 0; for(int i=0;i<A.length;i++){ sum += A[i...原创 2020-03-11 20:41:09 · 155 阅读 · 0 评论 -
leetcode-16 最接近的三数之和
题目分析这个题目与三数之和的题目非常类似,是同一个题目,只要记录最大的差值,然后返回就好了Java代码public int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int span = Integer.MAX_VALUE; boolean flag = true;...原创 2020-03-10 22:59:05 · 64 阅读 · 0 评论 -
leetcode每日一题 -二叉树的直径
题目分析根据题目,我们可以转换思想到求二叉树的深度,其中左子树深度加上右子树深度就是二叉树某一个节点的直径,在这个过程中使用一个全局变量记录最大解即可。Java代码public int res; public int diameterOfBinaryTree(TreeNode root) { res = 0; depth(root); ...原创 2020-03-10 22:19:30 · 78 阅读 · 0 评论 -
leetcode-15 三数之和
题目分析该题目利用双指针加排序该题目的难点在于去除重复那么如何去除重复呢?除去重复的第一个元素i对于每一个i,除去重复的l和rJava代码public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList&...原创 2020-03-10 16:22:23 · 93 阅读 · 0 评论 -
leetcode-14 最长公共前缀
题目分析最长公共前缀,无非就是公共子串位于开头,那么我们就可以使用indexOf这个方法来寻找公共子串。逐个比较,然后截短公共子串即可。Java代码public String longestCommonPrefix(String[] strs) { if(strs.length<=0){ return ""; } ...原创 2020-03-10 14:29:55 · 60 阅读 · 0 评论 -
leetcode-13 罗马数字转整数
题目分析罗马数字转整数,其实就是如果一个字符比后面紧跟的字符小那么表示负数,其余表示正数,然后求和即可。java代码public int romanToInt(String s) { Map<Character, Integer> map = new HashMap<>(); map.put('I', 1); map.p...原创 2020-03-10 14:13:55 · 101 阅读 · 0 评论 -
leetcode-12 整数转罗马数字
题目分析使用贪心法去做,罗马数字就是尽可能的使用大数表示,那么我们从大到小安排数字就可以了。Java代码public String intToRoman(int num) { StringBuffer sb = new StringBuffer(); String[] romans = {"M","CM","D","CD","C","XC","L","XL",...原创 2020-03-10 14:02:39 · 66 阅读 · 0 评论 -
leetcode-11 盛水最多的容器
题目关键使用双指针解决这个问题:由于面积取决于边长短的那一端假设为m,所以要想得到比当前更大的面积,边长短的那一端必须舍弃,因为如果不舍弃,高最大就是m,而随着指针的移动宽会一直减小,因此面积只会越来越小。Java代码public int maxArea(int[] height) { int max_area = 0; int l = 0; ...原创 2020-03-09 18:46:21 · 61 阅读 · 0 评论 -
leetcode-10 正则表达式的匹配
java代码class Solution { public boolean isMatch(String str, String pattern) { if (str == null || pattern == null) { return true; } int strIndex = 0; int ...原创 2020-03-09 17:07:38 · 91 阅读 · 0 评论 -
leetcode9 回文数
Java代码public class isPalindrome_9 { public boolean isPalindrome(int x) { String s = String.valueOf(x); System.out.println(s); StringBuffer sb = new StringBuffer(s).reverse...原创 2020-03-09 15:11:19 · 84 阅读 · 0 评论 -
leetcode-8 字符串转换为整数
题目分析使用正则表达式与异常处理可以解决这个问题java代码import java.util.regex.*;class Solution { public int myAtoi(String string) { String str = string.trim(); /* ^[\\+\\-]?\\d+ ...原创 2020-03-09 14:44:05 · 68 阅读 · 0 评论 -
leetcode每日一题-买卖股票的最佳时机
题目分析使用一个变量记录前i天的最低售价,然后计算最大差值就好了Java代码public int maxProfit(int[] prices) { int max_prifit = Integer.MIN_VALUE; int minPrice = Integer.MAX_VALUE; for(int i=0;i<prices.leng...原创 2020-03-09 14:03:58 · 129 阅读 · 0 评论 -
leetcode7 - 整数反转
Java代码public int reverse(int x) { int rev = 0; while(x != 0){ int pop = x % 10; x = x / 10; //判定越界 // temp = rev*10 + pop i...原创 2020-03-06 18:46:47 · 92 阅读 · 0 评论 -
leetcode6 - Z字形变换
java代码方法1public String convert(String s, int numRows) { // 处理1 行的特殊情况 if (numRows == 1) return s; // 使用 新的空间保存非空行 List<StringBuffer> rows = new ArrayList<>...原创 2020-03-06 16:42:52 · 116 阅读 · 0 评论 -
leetcode5 最长回文子串
Java代码方法一public String longestPalindrome(String s) { if (s == null || s.length() < 1) return ""; int start = 0; int end = 0; for(int i=0;i<s.length();i++){ ...原创 2020-03-06 15:47:10 · 53 阅读 · 0 评论 -
leetcode-4寻找两个有序数组的中位数
题目描述给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。题目示例示例1nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例2nums1 = [1, 2]nums2 = [3, 4]则中位数是 (...原创 2020-02-29 15:32:23 · 131 阅读 · 0 评论 -
leetcode-3 无重复的最长子字符串
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。题目示例题目分析如果S[i,j)不包含重复字符,s[j+1]不在[i,j)中,那么最长为[i,j+1),否则窗口从s[j’+1,j+1]重新开始计数,j’为字符重复位置。java代码public int lengthOfLongestSubstring(String s) { if(s == nu...原创 2020-02-28 14:47:59 · 92 阅读 · 0 评论 -
leetcode-2 两数相加
题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。题目示例输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ...原创 2020-02-28 13:53:56 · 104 阅读 · 0 评论 -
leetcode-1两数之和
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]题目分析使用...原创 2020-02-28 00:26:49 · 68 阅读 · 0 评论 -
LeetCode163周赛第三题——1262. 可被三整除的最大和
1262. 可被三整除的最大和题目描述给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。示例示例1输入:nums = [3,6,5,1,8]输出:18解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。示例2输入:nums = [4]输出:0解释:4 不能被 3 整除,所以无法选出数字,返回 0。题目分析1一个直观的思路就是...原创 2019-11-26 20:23:31 · 1312 阅读 · 0 评论 -
LeetCode163周赛第二题——1261. 在受污染的二叉树中查找元素
1261. 在受污染的二叉树中查找元素题目描述给出一个满足下述规则的二叉树:root.val == 0如果 treeNode.val == x 且 treeNode.left != null,那么 treeNode.left.val == 2 * x + 1如果 treeNode.val == x 且 treeNode.right != null,那么 treeNode.right.v...原创 2019-11-26 19:03:46 · 139 阅读 · 0 评论 -
LeetCode163周赛第一题-1260. 二维网格迁移
1260. 二维网格迁移题目描述给你一个 n 行 m 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。每次「迁移」操作将会引发下述活动:位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]。位于 grid[i][m - 1] 的元素将会移动到 grid[i + 1][0]。位于 grid[n - 1][m - 1] 的元素将会移动到...原创 2019-11-26 12:29:07 · 232 阅读 · 0 评论 -
LeetCode162周赛第四题-1255. 得分最高的单词集合
1255. 得分最高的单词集合题目描述你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score。请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由 letters 里的字母拼写出的 任意 属于 words 单词子集中,分数最高的单词集合的得分。单词拼写游戏的规则概述如下:玩家需要用字母表 letters 里...原创 2019-11-26 12:02:51 · 205 阅读 · 0 评论 -
LeetCode162周赛第三题-1254. 统计封闭岛屿的数目
1254. 统计封闭岛屿的数目题目描述有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 )。我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。如果一座岛屿 完全 由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。请返回封闭岛屿的数目。题目地址示例示例 1...原创 2019-11-26 00:31:50 · 184 阅读 · 0 评论 -
LeetCode162周赛第二题-1253. 重构 2 行二进制矩阵
1253. 重构 2 行二进制矩阵题目描述给你一个 2 行 n 列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。第 0 行的元素之和为 upper。第 1 行的元素之和为 lower。第 i 列(从 0 开始编号)的元素之和为 colsum[i],colsum 是一个长度为 n 的整数数组。你需要利用 upper,lower 和 colsum 来重构...原创 2019-11-25 23:00:21 · 118 阅读 · 0 评论 -
LeetCode162周赛第一题-1252. 奇数值单元格的数目
1252. 奇数值单元格的数目题目描述给你一个 n 行 m 列的矩阵,最开始的时候,每个单元格中的值都是 0。另有一个索引数组 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。你需要将每对 [ri, ci] 指定的行和列上的所有单元格的值加 1。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 「奇...原创 2019-11-25 22:50:27 · 148 阅读 · 0 评论 -
LeetCode161周赛第四题-5250. 检查好数组
1321原创 2019-11-04 20:58:35 · 122 阅读 · 0 评论 -
LeetCode161周赛第三题-1249. 移除无效的括号
1249. 移除无效的括号题目描述给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下 任意一条 要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符...原创 2019-11-04 20:17:46 · 384 阅读 · 0 评论 -
LeetCode161周赛第二题-1248. 统计「优美子数组」
统计「优美子数组」题目描述给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。题目点击这里示例示例 1:输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。示例 2:...原创 2019-11-04 19:56:01 · 253 阅读 · 0 评论 -
LeetCode161周赛-第一题-1247. 交换字符使得字符串相同
1247. 交换字符使得字符串相同题目描述:有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 “x” 和 “y”,你需要通过「交换字符」的方式使这两个字符串相同。每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。交换只能发生在两个不同的字符串之间,绝对不能发生在同一个字符串内部。也就是说,我们可以交换 s1[i] 和 s2[j],但不能交换 s1[i] 和...原创 2019-11-04 19:31:15 · 649 阅读 · 0 评论