LeetCode
LeetCode每日一题,始于2020.9.15
浪里小白~
浪里小白,浪着浪着就没了
展开
-
【LeetCode练习】[困难]4. 寻找两个正序数组的中位数
【LeetCode练习】[困难]4. 寻找两个正序数组的中位数4. 寻找两个正序数组的中位数题目来源算法思想:有序数组,中位数题目:java代码–合并两个有序数组,不符合复杂度思路: 合并时间空间均为O(m+n),不符合题目O(log(m+n))合并两个有序数组,使之成为一个有序数组,然后利用排好序的数组,找到中位数class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) {原创 2021-12-22 14:08:50 · 326 阅读 · 0 评论 -
【LeetCode练习】[困难]354. 俄罗斯套娃信封问题
【LeetCode练习】[困难]354. 俄罗斯套娃信封问题354. 俄罗斯套娃信封问题354. 俄罗斯套娃信封问题算法思想:动态规划题目:问题分析二维的最长上升子序列问题一维: 【LeetCode练习】[中等] 300. 最长上升子序列(dp)注意点:二维排序问题:假设信封的长宽是a,b,其中需要a,b均大于,才可以装入本题需要:按照a从小到大排序,a相同的情况下,b按照从大到小排序。java代码class Solution { public int maxEnv原创 2021-12-22 14:07:14 · 172 阅读 · 0 评论 -
【LeetCode练习】[中等]1116. 打印零与奇偶数
【LeetCode练习】[中等]1116. 打印零与奇偶数1116. 打印零与奇偶数1116. 打印零与奇偶数算法思想:多线程题目:问题分析多线程,同步问题;使用方法:信号量:容易理解,与操作系统中的信号一样,但是效率不高可重用锁:java代码–信号量 class ZeroEvenOdd { private int n; // zero 信号量, 默认可以使用; private Semaphore zero = new Sem原创 2021-12-22 14:06:51 · 192 阅读 · 0 评论 -
【LeetCode练习】[中等]剑指 Offer II 022. 链表中环的入口节点
【LeetCode练习】[中等]剑指 Offer II 022. 链表中环的入口节点剑指 Offer II 022. 链表中环的入口节点剑指 Offer II 022. 链表中环的入口节点算法思想:环形链表,快慢指针题目:问题分析快慢指针;慢指针:向后移动一个结点;快指针:向后移动两个结点;找到相遇的节点,然后再计算入口节点;计算如图所示:2(x + y1) = x+y1+y2+y1即:x = y2java代码–信号量 public class Solution {原创 2021-12-22 14:06:02 · 143 阅读 · 0 评论 -
【LeetCode练习】[中等]面试题 17.14. 最小K个数
【LeetCode练习】[中等]面试题 17.14. 最小K个数面试题 17.14. 最小K个数面试题 17.14. 最小K个数算法思想:快排,堆排序题目:题目还可以使用堆排序。建立大顶推。快排思路:利用快排的思想,进行划分,每一次划分使得元素左边的值小于该元素,右边的值大于该元素最小k个数,划分到数下标正好==k,则左边的数是最小k个数,时间复杂度是java代码–快排class Solution { public int[] smallestK(int[] arr,原创 2021-03-25 21:20:21 · 316 阅读 · 0 评论 -
【LeetCode练习】[中等]29. 两数相除
【LeetCode练习】[中等]29. 两数相除29. 两数相除29. 两数相除算法思想:位运算题目:java代码/*** 2^n是1,2,4,8...2^31这种数,当n为31时,这个数特别大,100/2^n是一个很小的数,肯定是小于3的,所以循环下来,* 当n=5时,100/32=3, 刚好是大于等于3的,这时我们将100-32*3=4,也就是减去了32个3,接下来我们再处理4,同样手法可以再减去一个3** 所以一共是减去了33个3,所以商就是33*/class Solutio原创 2021-03-25 14:37:51 · 172 阅读 · 0 评论 -
【LeetCode练习】[困难]123. 买卖股票的最佳时机 III
【LeetCode练习】[困难]123. 买卖股票的最佳时机 IIIleetcode中还有买卖股票的最佳时机I买卖股票的最佳时机III,II 具体内容123. 买卖股票的最佳时机 III123. 买卖股票的最佳时机 III算法思想:dp题目:java代码...原创 2021-03-22 12:54:29 · 152 阅读 · 0 评论 -
【LeetCode练习】[中等]139. 单词拆分
【LeetCode练习】[中等]139. 单词拆分139. 单词拆分139. 单词拆分算法思想:dp题目:转移矩阵:dp[i]=dp[j] && check(s[j…i−1])java代码class Solution { public boolean wordBreak(String s, List<String> wordDict) { boolean[] dp = new boolean[s.length() + 1]; Set<原创 2021-03-21 22:22:06 · 190 阅读 · 2 评论 -
【LeetCode练习】[困难]42. 接雨水
【LeetCode练习】[困难]42. 接雨水42. 接雨水42. 接雨水算法思想:dp题目:java代码class Solution { public int trap(int[] height) { int len = height.length; if(len < 2){//无法接雨水,直接返回0 return 0; } int[] left = new int[len];//记录i左边原创 2021-03-20 18:08:36 · 82 阅读 · 0 评论 -
【LeetCode练习】[中等]179. 最大数
【LeetCode练习】[中等]179. 最大数179. 最大数179. 最大数算法思想:排序题目:利用字符串自己的字典序比较java代码class Solution { public String largestNumber(int[] nums) { //为了构建最大数字,我们希望越高位的数字越大越好。 //字符串自己就能字典序排序 String[] str = new String[nums.length]; fo原创 2021-03-20 15:34:52 · 93 阅读 · 0 评论 -
【LeetCode练习】[中等]547. 省份数量
【LeetCode练习】[中等]547. 省份数量547. 省份数量547. 省份数量算法思想:数组题目:相当于求这个图中的连通分量有多少,可以用DFS,BFS,并查集如下记录DFS BFSjava代码-DFSclass Solution { public int findCircleNum(int[][] isConnected) { int provinces = isConnected.length; boolean[] visited = n原创 2021-03-12 14:36:08 · 132 阅读 · 0 评论 -
【剑指offer】leetcode练习-简单
剑指 Offer剑指 Offer 58 - II. 左旋转字符串题目:java代码class Solution { public String reverseLeftWords(String s, int n) { if(s.equals("")){ return ""; } return s.substring(n,s.length())+s.substring(0,n); }}...原创 2021-03-12 14:21:35 · 501 阅读 · 0 评论 -
【leetcode练习】剑指 Offer 51. 数组中的逆序对
剑指 Offer 51. 数组中的逆序对归并排序public class Solution { public int reversePairs(int[] nums) { int len = nums.length; if (len < 2) { return 0; } int[] copy = new int[len]; for (int i = 0; i < len; i+原创 2021-03-09 17:10:52 · 72 阅读 · 0 评论 -
【LeetCode每日一题】[简单]860. 柠檬水找零
【LeetCode每日一题】[简单]860. 柠檬水找零860. 柠檬水找零860. 柠檬水找零算法思想:数组题目:java代码模拟找零钱的过程class Solution { //模拟法 public boolean lemonadeChange(int[] bills) { int five = 0;//5块钱数量 int ten = 0;//10块钱数量 int n = bills.length; for (int i = 0;原创 2020-12-10 13:50:28 · 151 阅读 · 0 评论 -
【LeetCode每日一题】[中等]62. 不同路径
【LeetCode每日一题】[中等]62. 不同路径62. 不同路径62. 不同路径算法思想:动态规划题目:java代码class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int[m][n]; for(int i = 0; i < m; i++){ dp[i][0] = 1;//初始化第一列 }原创 2020-12-09 16:26:38 · 100 阅读 · 0 评论 -
【LeetCode每日一题】[中等]861. 翻转矩阵后的得分
【LeetCode每日一题】[中等]861. 翻转矩阵后的得分861. 翻转矩阵后的得分861. 翻转矩阵后的得分算法思想:贪心题目:java代码思路: 要数尽可能的大,每行的第一列要是1(翻转行),其余各列要尽可能使得1的数量更多(翻转列)如下二进制转换:首先,看第一列是不是1,如果不是翻转;还要记录结果按列进行后续遍历;统计0/1个数,利用大的数,进行该列的计算class Solution { public int matrixScore(int[][] A) {原创 2020-12-07 18:00:03 · 103 阅读 · 0 评论 -
【LeetCode每日一题】[中等]767. 重构字符串
【LeetCode每日一题】[中等]767. 重构字符串767. 重构字符串767. 重构字符串算法思想:字符串题目:题解思路:首先把重复次数的最大的字母放在偶数位置(0,2,4,,,),如果不能放下,肯定有重复字母相邻,如果可以,则存在这样字符串;接着将剩下字母放在剩余偶数位置(如果有的话),再然后放奇数位置(1,3,5,7,,,,);这样保证,放置的每一个字母与前一个相同字母,相隔(满足不相邻要求)java代码class Solution { public String原创 2020-11-30 16:46:43 · 87 阅读 · 0 评论 -
【LeetCode每日一题】[简单]976. 三角形的最大周长
【LeetCode每日一题】[简单]976. 三角形的最大周长976. 三角形的最大周长976. 三角形的最大周长算法思想:数组题目:java代码O(nlogn)方法:将边按照从小到大顺序进行排序;从大到小进行搜索,如果,edge[i],edge[i+1],edge[i+2]能构成三角形,即为周长对大的三角形;原因:三角形条件: A<B+C (其中A是最长的边);要使得周长最长,B+C要尽可能的大;排序后的B+C剩下边里面的最大,如果不满足,则没有边可以边满足B+C>原创 2020-11-29 13:47:42 · 204 阅读 · 2 评论 -
【LeetCode每日一题】[困难]454. 四数相加 II
【LeetCode每日一题】[困难]454. 四数相加 II454. 四数相加 II454. 四数相加 II算法思想:组合题目:java代码class Solution { //思路,分成两个数之和A+B,两个数之和C+D,然后再判断(A+B)+(C+D)有多少种 public int fourSumCount(int[] A, int[] B, int[] C, int[] D) { //使用map存储A+B的值,提高查找效率 Map<Integer原创 2020-11-27 22:12:37 · 131 阅读 · 0 评论 -
【LeetCode每日一题】[简单]1370. 上升下降字符串
【LeetCode每日一题】[简单]1370. 上升下降字符串1370. 上升下降字符串1370. 上升下降字符串算法思想:字符串题目:java代码计数;统计26个字母出现次数;正向遍历,反向遍历,拼凑新字符串;class Solution { public String sortString(String s) { int[] m = new int[26];//计数 for (char ch : s.toCharArray()) {//统计每个字母出现频率 m原创 2020-11-25 20:59:17 · 109 阅读 · 0 评论 -
【LeetCode练习】[中等] 300. 最长上升子序列(dp)
【LeetCode练习】[中等]300. 最长上升子序列300. 最长上升子序列300. 最长上升子序列算法思想:动态规划题目:java代码–转换成LCS问题蛮力,,,将原数组排序生成新数组,寻找两个数组的最长公共子序列,即为最长上升子序列,,,特别蛮力,效率很低要特别注意,重复元素的问题,要去重class Solution { public int lengthOfLIS(int[] nums) { int n = nums.length; int[] sor原创 2020-11-18 18:08:20 · 113 阅读 · 0 评论 -
【LeetCode每日一题】[中等]134. 加油站
【LeetCode每日一题】[中等]134. 加油站134. 加油站134. 加油站算法思想:数组题目:java代码–暴力暴力,枚举每一个位置,判断能都行驶一周class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { //暴力,枚举每一个位置,判断能都行驶一周 int n = gas.length; for (int i = 0; i < n; i++) {//遍历每一原创 2020-11-18 16:18:37 · 113 阅读 · 0 评论 -
【LeetCode练习】[中等]1143. 最长公共子序列
【LeetCode练习】[中等]1143. 最长公共子序列1143. 最长公共子序列1143. 最长公共子序列算法思想:字符串,动态规划题目:分析:java代码class Solution { //运用动态规划知识 public int longestCommonSubsequence(String text1, String text2) { int M = text1.length(); int N = text2.length(); int[][] dp原创 2020-11-18 14:56:21 · 148 阅读 · 0 评论 -
【LeetCode练习】[困难]135. 分发糖果
【LeetCode练习】[困难]135. 分发糖果135. 分发糖果135. 分发糖果算法思想:数组,贪心题目:思路:java代码class Solution { public int candy(int[] ratings) { //从前向后,从后向前,都要满足关系,进行两次遍历 if(ratings == null || ratings.length == 0){ return 0; } i原创 2020-11-17 21:59:53 · 112 阅读 · 0 评论 -
【LeetCode练习】[中等]200. 岛屿数量
【LeetCode练习】[中等]200. 岛屿数量200. 岛屿数量200. 岛屿数量算法思想:DFS,二维数组题目:java代码class Solution { int m = 0;//长 int n = 0;//宽 public int numIslands(char[][] grid) { int res = 0; m = grid.length; n = grid[0].length; for (int i = 0; i < m; i++) {原创 2020-11-17 18:09:25 · 118 阅读 · 0 评论 -
【LeetCode每日一题】[简单]1030. 距离顺序排列矩阵单元格
【LeetCode每日一题】[简单]1030. 距离顺序排列矩阵单元格1030. 距离顺序排列矩阵单元格1030. 距离顺序排列矩阵单元格算法思想:数组,排序题目:思路:直接利用曼哈顿记录排序分桶,然后按照桶大小连接起来java代码直接排序class Solution { public int[][] allCellsDistOrder(int R, int C, int r0, int c0) { int[][] res = new int[R * C][2];//生原创 2020-11-17 15:44:37 · 162 阅读 · 1 评论 -
【LeetCode每日一题】[中等]406. 根据身高重建队列
【LeetCode每日一题】[中等]406. 根据身高重建队列406. 根据身高重建队列406. 根据身高重建队列算法思想:数组,排序题目:有两种思路:1.身高从低到高,低的人去留空位k,找到最后的位置2,身高从高到底,高的人先站好,矮的人去插入kjava代码从低到高:排序: 身高按照从低到高的顺序;k值按按照大到小的顺序遍历人,利用人的k去找位置; k是几,前面就留几个空位;空的位置是留给比他的高的人或者跟他一样高但k值比他小的人;没遍历完一个人,这个人找到了最终的位置;原创 2020-11-16 16:31:55 · 212 阅读 · 0 评论 -
【LeetCode练习】[中等]316. 去除重复字母
【LeetCode练习】[中等]316. 去除重复字母316. 去除重复字母316. 去除重复字母1081. 不同字符的最小子序列以上两个题目相同算法思想:数组题目:思路linkjava代码class Solution { public String removeDuplicateLetters(String s) { //也可以利用,map,stack,但是速度不如直接利用数组快 int n = s.length(); char[] stack = n原创 2020-11-15 17:02:06 · 134 阅读 · 0 评论 -
【LeetCode每日一题】[中等]402. 移掉K位数字
【LeetCode每日一题】[中等]402. 移掉K位数字402. 移掉K位数字402. 移掉K位数字算法思想:数组题目:思路: linkjava代码class Solution { public String removeKdigits(String num, int k) { //如果长度==k,即全部删除,直接返回0; if (num.length() == k) { return "0"; } int n = num.length()原创 2020-11-15 15:56:55 · 91 阅读 · 0 评论 -
【LeetCode每日一题】[简单]1122. 数组的相对排序
【LeetCode每日一题】[简单]1122. 数组的相对排序328. 奇偶链表1122. 数组的相对排序算法思想:数组题目:java代码class Solution { //计数排序 public int[] relativeSortArray(int[] arr1, int[] arr2) { int[] m = new int[1001];//用来统计arr1中arr2数值出现次数 int n1 = arr1.length;//arr1长度 int n2 =原创 2020-11-14 14:56:36 · 89 阅读 · 0 评论 -
【LeetCode每日一题】[中等]328. 奇偶链表
【LeetCode每日一题】[中等]328. 奇偶链表328. 奇偶链表328. 奇偶链表算法思想:链表题目:思路: 思路link分离奇数偶数链表,然后合并奇偶链表java代码class Solution { public ListNode oddEvenList(ListNode head) { if (head == null) {//如果是空,直接返回 return head; } ListNode evenHead = head.next;//偶数节点头结点原创 2020-11-13 16:02:36 · 106 阅读 · 0 评论 -
【LeetCode每日一题】[困难]327. 区间和的个数
【LeetCode每日一题】[困难]327. 区间和的个数327. 区间和的个数327. 区间和的个数算法思想:数组,并归排序思想题目:思路: link为什么可以排序??思路来源java代码class Solution { int count = 0;//区间和数量 int lower;//下限 int upper;//上限 public int countRangeSum(int[] nums, int lower, int upper) { int n = num原创 2020-11-13 15:20:22 · 131 阅读 · 0 评论 -
【LeetCode每日一题】[简单]922. 按奇偶排序数组 II
【LeetCode每日一题】[简单]922. 按奇偶排序数组 II922. 按奇偶排序数组 II922. 按奇偶排序数组 II算法思想:数组题目:java代码两遍遍历:class Solution { public int[] sortArrayByParityII(int[] A) { int n = A.length;//长度 int[] a = new int[n / 2];//记录偶数 int[] b = new int[n / 2];//原创 2020-11-12 12:42:14 · 130 阅读 · 0 评论 -
【LeetCode每日一题】[中等]973. 最接近原点的 K 个点
【LeetCode每日一题】[中等]973. 最接近原点的 K 个点973. 最接近原点的 K 个点973. 最接近原点的 K 个点算法思想:数组,排序题目:java代码class Solution { public int[][] kClosest(int[][] points, int K) { //利用Arrays.sort排序,然后直接返回前k个值,效率不高,重在排序方法 Arrays.sort(points, new Comparator<原创 2020-11-11 14:06:26 · 287 阅读 · 0 评论 -
【LeetCode每日一题】[简单]1356. 根据数字二进制下 1 的数目排序
【LeetCode每日一题】[简单]1356. 根据数字二进制下 1 的数目排序1356. 根据数字二进制下 1 的数目排序1356. 根据数字二进制下 1 的数目排序算法思想:数组题目:java代码class Solution { public int[] sortByBits(int[] arr) { for (int i = 0; i < arr.length; i++) { arr[i] += Integer.bitCount(arr[i]) * 100000;原创 2020-11-11 14:02:29 · 121 阅读 · 0 评论 -
【LeetCode每日一题】[中等]31. 下一个排列
【LeetCode每日一题】[中等]31. 下一个排列31. 下一个排列题目来源算法思想:数组题目:算法思路:link.java代码class Solution { public void nextPermutation(int[] nums) { int n = nums.length; int i = n - 1; while (i > 0 && nums[i-1] >= nums[i]) {//从后向前遍历,找第一个下降点i-1原创 2020-11-10 13:44:57 · 113 阅读 · 0 评论 -
【LeetCode每日一题】[简单]122. 买卖股票的最佳时机 II
【LeetCode每日一题】[简单]122. 买卖股票的最佳时机 II122. 买卖股票的最佳时机 II题目来源算法思想:数组题目:java代码class Solution { public int maxProfit(int[] prices) { int maxProfit = 0; int n = prices.length; for (int i = 1; i < n; i++) { // 一直向后遍历寻找,如原创 2020-11-08 15:05:35 · 160 阅读 · 0 评论 -
【LeetCode每日一题】[困难]57. 插入区间
【LeetCode每日一题】[困难]57. 插入区间57. 插入区间题目来源算法思想:数组题目:思路; 依次遍历(从左往右)排好序的原区间数组,遍历的当前区间[a ,b]与待插入区间[aa, bb]有以下关系:当前区间与插入区间不相交,需要直接保存当前区间:当前区间的最大值小于插入区间的最小值(b < aa);或者插入区间已经完成了插入;当 aa<a, 其中分为两种情况:b >= aa, 此时相交, 当前区间最小值以及最大值均需要修改; 修改之后,采用向后遍实现区间的原创 2020-11-04 21:53:49 · 113 阅读 · 0 评论 -
【LeetCode练习】[简单]14. 最长公共前缀
【LeetCode练习】[简单]14. 最长公共前缀14. 最长公共前缀题目来源算法思想:字符串题目:java代码class Solution { public String longestCommonPrefix(String[] strs) { String pre = "";//前缀 if(strs.length == 0){//如果长度是0直接返回空字符串 return ""; } if (原创 2020-11-03 20:20:48 · 117 阅读 · 0 评论 -
【LeetCode练习】[中等]12. 整数转罗马数字
【LeetCode练习】[中等]12. 整数转罗马数字12. 整数转罗马数字题目来源算法思想:数组,数学题目:java代码class Solution { public String intToRoman(int num) { int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1};//存放值 String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX原创 2020-11-03 19:41:40 · 69 阅读 · 0 评论