力扣
sunny_daily
java、数据结构、leetcode、企业数字化转型!在线免费接需求!!!
展开
-
04.查找两个正序数组的中位数
两个正序数组中位数原创 2023-06-14 14:43:39 · 696 阅读 · 0 评论 -
力扣06-Z字形变换(java代码实现)
java实现Z字形变换原创 2022-11-02 12:20:11 · 346 阅读 · 0 评论 -
1603-设计停车系统
请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。请你实现ParkingSystem类:ParkingSystem(int big, int medium, int small)初始化ParkingSystem类,三个参数分别对应每种停车位的数目。bool addCar(int carType)检查是否有carType对应的停车位。...原创 2021-09-23 20:55:49 · 71 阅读 · 0 评论 -
力扣518-零钱兑换Ⅱ
题干:给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0。 说实话,这道题没看明白怎么做的。但这里似乎是只要事先知道一个定理"前 k 个硬币凑齐金额 i,要分两种情况考虑:一种是只用前 k - 1 个硬币就凑齐了;一种是前面已经凑到了 i - coins[k - 1],现在就差第 k 个硬币了”,这道题就很好解了,但这个定理如何证明的,网上也没找到材料...原创 2021-09-06 20:44:15 · 163 阅读 · 0 评论 -
力扣322-零钱兑换
题干:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。具体解析过程见代码package likou;/* * 322.零钱兑换 * 题干:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额 * 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回...原创 2021-09-06 19:28:51 · 115 阅读 · 0 评论 -
力扣300-最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。package likou;/* * 300.最长递增子序列 * 输入:nums = [10,9,2,5,3,7,101,18],输出:4 * 输入:nums = [0,1,0,3,2,3],输出:4 */public class Demo300 { ...原创 2021-09-03 17:08:49 · 435 阅读 · 0 评论 -
力扣516-最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。package likou;/* * 516.最长回文子序列 * 题干: * 给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度; * 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列 * 输入:bbbab,输出4 * 输入:cbbd,输出2 ...原创 2021-09-03 14:21:01 · 197 阅读 · 0 评论 -
力扣5-最长回文串
题干:给你一个字符串 s,找到 s 中最长的回文子串。如输入"babad",则输出"aba";如输入"cbbd",则输出为“bb”。具体解析过程参考代码注释。package learnproject.lekou;/* * 5.最长回文串 * 题干:给你一个字符串 s,找到 s 中最长的回文子串。 */public class Demo5 { /*s = "babad" * 1.假设字符串长度为n,当子串长度为1时,肯定是回文串 * 2....原创 2021-09-03 00:44:05 · 116 阅读 · 0 评论 -
力扣221-最大正方形
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。利用动态规划算法求解,具体解析过程见代码注释。package learnproject.lekou;/* * 221.最大正方形 * 题干: * 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积 */public class Demo221 { /* * 解题思路:要求面积最大,则只需要求出边最大即可 ...原创 2021-09-02 23:19:20 · 103 阅读 · 0 评论 -
力扣64-最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。 利用动态规划算法,很容易解决。参考代码如下,如果弄明白第63道题思想,这个就更好理解了。第63题解题步骤和解析:力扣63-不同路径Ⅱ_sunny_daily的博客-CSDN博客package likou;/* * 64.最小路径和 * 题干: * 给定一个包含非负整数的 m x n 网格 grid ,请找出...原创 2021-09-02 19:22:25 · 132 阅读 · 0 评论 -
力扣63-不同路径Ⅱ
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 解题思路: ...原创 2021-09-02 18:49:36 · 214 阅读 · 0 评论 -
力扣62-不同路径
一个机器人位于一个m x n网格的左上角(起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?package learnproject.lekou;/* * 62.不同路径 * 题干: * 一个机器人位于一个m x n网格的左上角(起始点在下图中标记为 “Start” ) * 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记...原创 2021-09-01 01:19:43 · 106 阅读 · 0 评论 -
力扣120-三角形最小路径和
package learnproject.lekou;import java.util.ArrayList;import java.util.List;public class Demo120 { public int minimumTotal(List<List<Integer>> triangle) { int size = triangle.size(); List<Integer&g.原创 2021-08-31 10:47:40 · 120 阅读 · 0 评论 -
力扣931-下降路径最小和
将该题转为动态规划算法就比较好理解了,需要注意的地方就是当输入数组只有一个元素时、两个元素时需要考虑是否需要做特殊处理即可。具体解析过程可以参考代码注释。package learnproject.lekou;/* * 931.下降路径最小和 * 提干: * 给你一个 n x n 的 方形整数数组matrix,请你找出并返回通过matrix的下降路径的最小和。 * 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素 * 在下一行选择的元素和当前行所选元素最多...原创 2021-08-31 00:42:10 · 258 阅读 · 0 评论 -
力扣96-不同的二叉搜索树
本题的核心还是以大化小,将大问题化为小问题进行求解,具体解题思路参考代码注释。其实代码还是可以优化的,固定三个参数就可以不用g数组,这样可以节省空间。package likou;/* * 96.不同的二叉搜索树 * 给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的 二叉搜索树有多少种? * 返回满足题意的二叉搜索树的种数 */public class Demo96 { /* * 解题思路: * 1.解决本题的第一步是要明确什么叫二叉搜索树 ...原创 2021-08-29 01:33:46 · 98 阅读 · 0 评论 -
力扣118-杨辉三角
这道题比较简单,也没啥算法特色,一遍一遍遍历即可。package likou;import java.util.ArrayList;import java.util.List;/* *118.杨辉三角 *题干: * 给定一个非负整数numRows,生成杨辉三角的前numRows行 * 在杨辉三角种,每个数就是它左上方和右上方的数的和 */public class Demo118 { /* * 解题思路:要把杨辉三角打印出来 * 这里也没啥窍门,一遍一遍...原创 2021-08-28 21:17:18 · 107 阅读 · 0 评论 -
力扣264-丑数Ⅱ
解题需要搞清楚两个概念即可,第一是什么是丑数;第二就是丑数从1开始往后,有什么规律,其实这些丑数都是由2、3、5相乘生成的,所以这里就需要定义三个变量分别标识由2、3、5生成的丑数。具体解析过程参考代码注释package likou;/* * 264:丑数 * 题干: * 给你一个整数n ,请你找出并返回第n个丑数 * 丑数就是只包含质因数 2、3 或 5 的正整数 */public class Demo264 { /* * 解题思路: * 首先...原创 2021-08-28 19:48:06 · 152 阅读 · 0 评论 -
力扣91-解码方法
这道题就是感觉有点绕,慢慢品味。package likou;/* * 91.解码方法 * 一条包含字母A-Z的消息通过以下进行了映射 * A - 1 * B- 2 * ... * Z - 26 * 要解码已编码的消息,所有数字必须基于上属映射的方法,反向映射回字母。 * 输入一个字符串,要求返回解码的方法数 * 例如:输入11106,可以映射为AAJF或者KJF,输出2 * 输入12,可以映射为AB或者L,输出2 * ...原创 2021-08-28 18:08:01 · 187 阅读 · 0 评论 -
力扣42-接雨水问题
接雨水问题被力扣归结到困难范畴,该题只是比较抽象,其实难度并不是很高,用动态规划算法即可。具体解析过程见代码注释部分package likou;/* * 接雨水 * 题干: * 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图 * 计算按此排列的柱子,下雨之后能接多少雨水 */public class Demo42 { /* * 解题思路: * 要想计算每一个格子能装多少雨水,这也就以为着要计算每个格子对应的左边的高度以及右边的...原创 2021-08-28 15:57:54 · 224 阅读 · 0 评论 -
力扣138-单词拆分
本题核心在两个地方,第一是要将list即可转为set集合;第二是需要理解题意,即当一个字符串可以拆分合法单词时,这个字符串应该是什么样的,然后再解题,这样比较好理解。具体解析过程以及示例参考样例代码。package likou;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;/* * 单词拆分 * 题干: * 给定一个非空字...原创 2021-08-25 18:54:07 · 144 阅读 · 0 评论 -
力扣714-买卖股票的最佳时机含手续费
买卖股票相关的第四道题了,还是动态规划算法,只是多了一个手续费,个人感觉把手续费放在买股票时计算比较好理解。package likou;/* * 买卖股票的最佳时机含手续费 * 题干: * 给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 * 整数fee代表了交易股票的手续费用 * 你可以无限次地完成交易,但是你每笔交易都需要付手续费 * 如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了 * 返回获得利润的最大值 * tip:...原创 2021-08-25 15:02:44 · 132 阅读 · 0 评论 -
力扣309-最佳买卖股票时期(含冷冻期)
买卖股票系列的第三道题,采用的算法也是动态规划算法。核心思想就是计算每天收益时要分三种情况,分别对应当天结束后的交易状态,具体解析过程参考代码示例。package likou;/* * 最佳买卖股票时期(含冷冻期) * 题干: * 给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 * 设计一个算法计算出最大利润 * 在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票) * 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股...原创 2021-08-25 14:28:53 · 117 阅读 · 0 评论 -
力扣119-杨辉三角
提供了两种算法,动态规划算法比较好理解但时间复杂度高,另外一种方法需要数学功底比较好但时间复杂度小,具体解析过程参考代码注释。package likou;import java.util.ArrayList;import java.util.List;/* * 杨辉三角Ⅱ * 题干: * 给定一个非负索引rowIndex,返回「杨辉三角的第rowIndex行 * 在杨辉三角中,每个数是它左上方和右上方的数的和 */public class Demo119 {...原创 2021-08-24 20:17:57 · 117 阅读 · 0 评论 -
力扣706-设计哈希映射
力扣将这道题设为简单,其实这里面的内容还是有点多。刚好可以借这道题复习一下jdk中标准hashmap对象的实现策略。package likou;import java.util.Iterator;import java.util.LinkedList;/* * 设计哈希映射(Demo706) * 题干: * 不使用任何内建的哈希表库设计一个哈希映射(HashMap) * 实现 MyHashMap类: * MyHashMap() 用空映射初始化对象 * ...原创 2021-08-24 19:20:01 · 130 阅读 · 0 评论 -
力扣56-合并区间问题
这道题其实算不上复杂,只是因为参杂了二维数组,而平时二维数组用的比较少,所以会比较陌生。也希望通过这道题复习一下二维数组。解题的核心在于要先对二维数组进行排序,要重写排序方法。具体解析过程可以参考代码注释部分。package likou;import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util.List;/* * 合并区间 * 题干:...原创 2021-08-24 17:40:28 · 135 阅读 · 0 评论 -
力扣122-买卖股票的最佳实际Ⅱ
虽然把这道题归为简单,但还是有点绕。解题思路和第1567道有点类似。package likou;/* * 买卖股票的最佳时机 * 题干: * 给定一个数组prices,其中prices[i]是一支给定股票第i天的价格 * 设计一个算法来计算你所能获取的最大利润 * 你可以尽可能地完成更多的交易(多次买卖一支股票) * 要求:必须在再次购买前出售掉之前的股票 */public class Demo122 { /* * 该题和力扣1567有点类似,...原创 2021-08-24 16:36:01 · 148 阅读 · 0 评论 -
力扣121-买卖股票的最佳时机
这道题比较简单,可以直接使用动态规划算法。具体解析过程可直接看代码,在代码注释中附录解析过程。package likou;/* * 买卖股票的最佳时机 * 题干: * 给定一个数组 prices,它的第i个元素prices[i]表示一支给定股票第 i天的价格 * 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票 * 设计一个算法来计算你所能获取的最大利润,如果不能获取利润返回0 */public class Demo121 { /...原创 2021-08-24 15:05:11 · 85 阅读 · 0 评论 -
力扣1014-最佳观光组合
这道题的核心是要将求values[i] + values[j] + i - j最大值,转换为求values[i]+i以及values[j]-j求最大值就比较好理解。遍历的时候只需要O(n)时间复杂度即可。package likou;/* * 最佳观光组合 * 题干: * 给你一个正整数数组 values,其中 values[i]表示第 i个观光景点的评分 * 且两个景点i和j间的距离为j - i * 一对景点(i < j)组成的观光组合的得分为 values[i...原创 2021-08-24 14:43:24 · 82 阅读 · 0 评论 -
力扣1567-乘积为正数的最长子数组长度
这道题还是有点绕,尤其是当nums[i]<0时的处理逻辑,需要特别注意,因为这里需要涉及一个将counte2的值赋给counte1。package likou;/* * 乘积为正数的最长子数组长度 * 题干: * 给你一个整数数组nums,请你求出乘积为正数的最长子数组的长度 * 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组 * 请你返回乘积为正数的最长子数组长度 */public class Demo1567 { /* * 解题思路:...原创 2021-08-23 20:43:01 · 143 阅读 · 0 评论 -
力扣152-乘积最大子数组
可以采用动态规划算法,但这里需要注意的一点就是会存在负负得正得场景。所以要求当遍历到时,要记录下前面的最小和最大值,因为nums[i]可能为正也可能为负。package likou;/* * 乘积最大子数组 * 题干: * 给你一个整数数组 nums * 请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字) * 并返回该子数组所对应的乘积 */public class Demo152 { /* * 解题思路: * 采用动态规划算...原创 2021-08-23 19:47:52 · 80 阅读 · 0 评论 -
力扣918-环形子数组的最大和
清晰易懂版。package likou;import java.util.Arrays;/* * 环形子数组的最大和 * 题干: * 给定一个由整数数组 A表示的环形数组 C,求 C的非空子数组的最大可能和 * 这里肯定是有一个隐含条件的,那就是数组元素要连续,不然直接对数组遍历,找到说有的正数即可 */public class Demo918 { /* * 解题思路: * 找到子数组的最大和,只有两种可能性 * 可能性1:最大和在n...原创 2021-08-23 01:28:37 · 106 阅读 · 0 评论 -
力扣75-颜色分类
提供了两种解题思路,方法二算法复杂度为O(n)。package likou;import java.util.Arrays;import java.util.HashMap;import java.util.Map;/* * 颜色分类 * 题干: * 给定一个包含红色、白色和蓝色,一共n个元素的数组 * 原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列 * 分别使用整数 0、1 和 2 分别表示红色、白色和蓝色 * 要求:...原创 2021-08-22 16:12:49 · 134 阅读 · 0 评论 -
力扣15-三数之和
package likou;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/* * 三数之和 * 题干: * 给你一个包含n个整数的数组nums; * 判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 * 请你找出所有和为 0 且不重复的三元组 */public class Demo15_1 { /* * 解题思路: ..原创 2021-08-22 14:42:01 · 56 阅读 · 0 评论 -
力扣169-多数元素
题干:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。如果不考虑空间复杂度,可以直接通过map来做,比较简单;如果要考虑空间复杂度为O(1),则需要使用Boyer-Moore 投票算法,具体代码及解析如下。package likou;/* * 多数元素 * 题干: * 给定一个大小为 n 的数组,找到其中的多数元素; * 多数元...原创 2021-08-21 16:36:18 · 184 阅读 · 0 评论 -
力扣45-跳跃游戏2
package likou;/* * 跳跃游戏2 * 题干: * 给你一个非负整数数组nums ,你最初位于数组的第一个位置; * 数组中的每个元素代表你在该位置可以跳跃的最大长度; * 你的目标是使用最少的跳跃次数到达数组的最后一个位置; * 假设你总是可以到达数组的最后一个位置 */public class Demo45 { /* * 解题思路: * 步骤1:从第一个节点开始算,计算第一个节点条数的步数为temp=nums[0] * ..原创 2021-08-21 00:15:47 · 144 阅读 · 0 评论 -
力扣136-只出现一次的数字
package likou;/* * 只出现一次的数字 * 题干: * 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次; * 找出那个只出现了一次的元素; * 要求: * 你的算法应该具有线性时间复杂度。 要求不用额外空间来计算 */public class Demo136 { /* * 解题思路: * 如果不考虑控件复杂度解法很多 * 但要考虑到不增加额外空间就只能用位运算,力扣解析做的很好,值得学习 */ public i.原创 2021-08-20 23:57:21 · 85 阅读 · 0 评论 -
力扣55-跳跃游戏
package likou;public class Demo55 { /* * 跳跃游戏 * 题干: * 给定一个非负整数数组 nums,你最初位于数组的 第一个下标; * 数组中的每个元素代表你在该位置可以跳跃的最大长度; * 判断你是否能够到达最后一个下标 * */ public static void main(String args[]) { Demo55 demo = new Demo55(); int[] nums = {3,2,1,0,4}.原创 2021-08-20 22:13:29 · 81 阅读 · 0 评论 -
力扣217-检查数组是否存在重复元素
package learnproject.lekou.arte;import java.util.HashSet;import java.util.Set;/* * 判断数组中存在重复元素 * 如果存在一值在数组中出现至少两次,函数返回 true 。 * 如果数组中每个元素都不相同,则返回 false 。 */public class Demo217 { public boolean containsDuplicate(int[] nums) { Set&.原创 2021-08-19 23:48:06 · 110 阅读 · 0 评论 -
力扣740-删除并获得点数
当选了第i个数的时候就不能再选第i-1和第i+1的数,则在解题的时候可以考虑将原始数组转为可以利用动态规划算法的数组处理,这样就比较简单了。只是这样空间复杂度会增加一点。package learnproject.lekou;public class Demo740 { public int deleteAndEarn(int[] nums) { int length = nums.length; if (length == 1) { return nums[0];...原创 2021-08-19 22:59:10 · 137 阅读 · 0 评论 -
力扣213-打家劫舍
package likou;/* * 打家劫舍 II * 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金; * 这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的; * 相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警; * 给定一个代表每个房屋存放金额的非负整数数组 * 计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额; */public class Demo213 { /* .原创 2021-08-19 14:33:36 · 82 阅读 · 0 评论