![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构和算法,包括力扣题目代码以及一些示例
sunny_daily
java、数据结构、leetcode、企业数字化转型!在线免费接需求!!!
展开
-
力扣06-Z字形变换(java代码实现)
java实现Z字形变换原创 2022-11-02 12:20:11 · 337 阅读 · 0 评论 -
java构建n阶魔方方阵
n为奇数实现逻辑原创 2022-11-01 17:05:35 · 710 阅读 · 0 评论 -
数据结构之单链表实现多项式加和减法(优化了一版)
数据结构之单链表实现多项式加和减法原创 2022-11-01 15:37:39 · 154 阅读 · 0 评论 -
数据结构之用栈处理算法中迷宫问题(java)
后入先出栈原创 2022-10-25 15:32:16 · 1093 阅读 · 0 评论 -
数据结构之递归算法解决汉诺塔问题
递归算法解决汉诺塔问题原创 2022-10-17 10:59:29 · 1004 阅读 · 0 评论 -
数据结构之单链表实现多项式加和减法
用单链表实现一元多项式的加法和减法原创 2022-08-23 17:49:44 · 1342 阅读 · 2 评论 -
数据结构之约赛夫环问题
约赛夫环的简单示例原创 2022-08-21 14:25:46 · 107 阅读 · 0 评论 -
数据结构之单链表节点移动代码示例
单链表节点移动原创 2022-08-21 12:21:13 · 782 阅读 · 0 评论 -
重学数据结构--单链表
数据结构之动手实现单链表原创 2022-08-20 18:43:27 · 143 阅读 · 0 评论 -
数据结构和算法示例二
数组合并原创 2022-08-19 17:31:52 · 196 阅读 · 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 · 100 阅读 · 0 评论 -
力扣169-多数元素
题干:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。如果不考虑空间复杂度,可以直接通过map来做,比较简单;如果要考虑空间复杂度为O(1),则需要使用Boyer-Moore 投票算法,具体代码及解析如下。package likou;/* * 多数元素 * 题干: * 给定一个大小为 n 的数组,找到其中的多数元素; * 多数元...原创 2021-08-21 16:36:18 · 151 阅读 · 0 评论 -
数据结构和算法示例一
算法对程序计算性能的影响示例原创 2022-08-18 20:55:17 · 365 阅读 · 0 评论 -
力扣518-零钱兑换Ⅱ
题干:给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0。 说实话,这道题没看明白怎么做的。但这里似乎是只要事先知道一个定理"前 k 个硬币凑齐金额 i,要分两种情况考虑:一种是只用前 k - 1 个硬币就凑齐了;一种是前面已经凑到了 i - coins[k - 1],现在就差第 k 个硬币了”,这道题就很好解了,但这个定理如何证明的,网上也没找到材料...原创 2021-09-06 20:44:15 · 137 阅读 · 0 评论 -
力扣322-零钱兑换
题干:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。具体解析过程见代码package likou;/* * 322.零钱兑换 * 题干:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额 * 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回...原创 2021-09-06 19:28:51 · 87 阅读 · 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 · 389 阅读 · 0 评论 -
力扣516-最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。package likou;/* * 516.最长回文子序列 * 题干: * 给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度; * 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列 * 输入:bbbab,输出4 * 输入:cbbd,输出2 ...原创 2021-09-03 14:21:01 · 167 阅读 · 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 · 90 阅读 · 0 评论 -
力扣221-最大正方形
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。利用动态规划算法求解,具体解析过程见代码注释。package learnproject.lekou;/* * 221.最大正方形 * 题干: * 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积 */public class Demo221 { /* * 解题思路:要求面积最大,则只需要求出边最大即可 ...原创 2021-09-02 23:19:20 · 88 阅读 · 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 · 101 阅读 · 0 评论 -
力扣63-不同路径Ⅱ
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 解题思路: ...原创 2021-09-02 18:49:36 · 201 阅读 · 0 评论 -
力扣62-不同路径
一个机器人位于一个m x n网格的左上角(起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?package learnproject.lekou;/* * 62.不同路径 * 题干: * 一个机器人位于一个m x n网格的左上角(起始点在下图中标记为 “Start” ) * 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记...原创 2021-09-01 01:19:43 · 82 阅读 · 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 · 104 阅读 · 0 评论 -
力扣931-下降路径最小和
将该题转为动态规划算法就比较好理解了,需要注意的地方就是当输入数组只有一个元素时、两个元素时需要考虑是否需要做特殊处理即可。具体解析过程可以参考代码注释。package learnproject.lekou;/* * 931.下降路径最小和 * 提干: * 给你一个 n x n 的 方形整数数组matrix,请你找出并返回通过matrix的下降路径的最小和。 * 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素 * 在下一行选择的元素和当前行所选元素最多...原创 2021-08-31 00:42:10 · 227 阅读 · 0 评论 -
力扣96-不同的二叉搜索树
本题的核心还是以大化小,将大问题化为小问题进行求解,具体解题思路参考代码注释。其实代码还是可以优化的,固定三个参数就可以不用g数组,这样可以节省空间。package likou;/* * 96.不同的二叉搜索树 * 给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的 二叉搜索树有多少种? * 返回满足题意的二叉搜索树的种数 */public class Demo96 { /* * 解题思路: * 1.解决本题的第一步是要明确什么叫二叉搜索树 ...原创 2021-08-29 01:33:46 · 75 阅读 · 0 评论 -
力扣118-杨辉三角
这道题比较简单,也没啥算法特色,一遍一遍遍历即可。package likou;import java.util.ArrayList;import java.util.List;/* *118.杨辉三角 *题干: * 给定一个非负整数numRows,生成杨辉三角的前numRows行 * 在杨辉三角种,每个数就是它左上方和右上方的数的和 */public class Demo118 { /* * 解题思路:要把杨辉三角打印出来 * 这里也没啥窍门,一遍一遍...原创 2021-08-28 21:17:18 · 80 阅读 · 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 · 118 阅读 · 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 · 151 阅读 · 0 评论 -
力扣42-接雨水问题
接雨水问题被力扣归结到困难范畴,该题只是比较抽象,其实难度并不是很高,用动态规划算法即可。具体解析过程见代码注释部分package likou;/* * 接雨水 * 题干: * 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图 * 计算按此排列的柱子,下雨之后能接多少雨水 */public class Demo42 { /* * 解题思路: * 要想计算每一个格子能装多少雨水,这也就以为着要计算每个格子对应的左边的高度以及右边的...原创 2021-08-28 15:57:54 · 215 阅读 · 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 · 113 阅读 · 0 评论 -
力扣714-买卖股票的最佳时机含手续费
买卖股票相关的第四道题了,还是动态规划算法,只是多了一个手续费,个人感觉把手续费放在买股票时计算比较好理解。package likou;/* * 买卖股票的最佳时机含手续费 * 题干: * 给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 * 整数fee代表了交易股票的手续费用 * 你可以无限次地完成交易,但是你每笔交易都需要付手续费 * 如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了 * 返回获得利润的最大值 * tip:...原创 2021-08-25 15:02:44 · 126 阅读 · 0 评论 -
力扣309-最佳买卖股票时期(含冷冻期)
买卖股票系列的第三道题,采用的算法也是动态规划算法。核心思想就是计算每天收益时要分三种情况,分别对应当天结束后的交易状态,具体解析过程参考代码示例。package likou;/* * 最佳买卖股票时期(含冷冻期) * 题干: * 给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 * 设计一个算法计算出最大利润 * 在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票) * 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股...原创 2021-08-25 14:28:53 · 94 阅读 · 0 评论 -
力扣119-杨辉三角
提供了两种算法,动态规划算法比较好理解但时间复杂度高,另外一种方法需要数学功底比较好但时间复杂度小,具体解析过程参考代码注释。package likou;import java.util.ArrayList;import java.util.List;/* * 杨辉三角Ⅱ * 题干: * 给定一个非负索引rowIndex,返回「杨辉三角的第rowIndex行 * 在杨辉三角中,每个数是它左上方和右上方的数的和 */public class Demo119 {...原创 2021-08-24 20:17:57 · 101 阅读 · 0 评论 -
力扣706-设计哈希映射
力扣将这道题设为简单,其实这里面的内容还是有点多。刚好可以借这道题复习一下jdk中标准hashmap对象的实现策略。package likou;import java.util.Iterator;import java.util.LinkedList;/* * 设计哈希映射(Demo706) * 题干: * 不使用任何内建的哈希表库设计一个哈希映射(HashMap) * 实现 MyHashMap类: * MyHashMap() 用空映射初始化对象 * ...原创 2021-08-24 19:20:01 · 124 阅读 · 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 · 112 阅读 · 0 评论