算法
zjshuster
昵称即是163邮箱前缀,欢迎交流
展开
-
Leetcode 39 组合之和问题
Leetcode 39 组合之和问题原创 2023-03-07 21:25:47 · 64 阅读 · 0 评论 -
leetcode 15 三数之和
三数之和原创 2023-02-23 20:37:58 · 70 阅读 · 0 评论 -
Leetcode 1071 字符串的最大公约数
leetcode1071原创 2023-02-06 21:48:53 · 141 阅读 · 0 评论 -
Leetcode 149 max points
Leetcode 149, 算法原创 2023-02-01 20:34:31 · 67 阅读 · 0 评论 -
leetcode124二叉树最大路径和
leetcode 124, 二叉树最大路径和,树形dp求解原创 2022-11-29 20:30:35 · 95 阅读 · 0 评论 -
leetcode 1488
leetcode1488,treemap, 贪心原创 2022-11-18 14:35:23 · 657 阅读 · 0 评论 -
Leetcode215 Kth Largest Element in an Array
Leetcode215。数组中第k大原创 2022-11-13 21:21:59 · 177 阅读 · 0 评论 -
Leetcode899 有序队列Orderly Queue
Leetcode 899 有序队列原创 2022-11-13 20:51:21 · 282 阅读 · 0 评论 -
Leetcode34 有序数组元素查找Find First and Last Position of Element in Sorted Array
有序数组二分查找原创 2022-11-09 21:56:03 · 269 阅读 · 0 评论 -
链表入环节点的查找
链表入环节点原创 2022-11-08 10:32:28 · 141 阅读 · 0 评论 -
加密解密简介
对称与非对称加解密原创 2021-12-31 16:42:40 · 1100 阅读 · 0 评论 -
骑士救公主
骑士救公主、二维数组遍历查询原创 2022-10-07 22:50:13 · 152 阅读 · 0 评论 -
最小差值问题(数组、二叉树)
数组、二叉树最小差值问题原创 2022-10-07 20:22:20 · 275 阅读 · 0 评论 -
最长上升子序列LIS
最长上升子序列原创 2022-08-09 15:52:42 · 97 阅读 · 0 评论 -
【博弈论系列算法】
先手必胜算法原创 2022-07-16 11:40:04 · 717 阅读 · 0 评论 -
leetcode406 重建身高队列
leetcode 有条件排序原创 2022-07-06 16:37:30 · 121 阅读 · 0 评论 -
跳表的设计与应用场景
skiplist原创 2022-06-30 15:52:25 · 956 阅读 · 0 评论 -
系统设计之HashSet
Set简单实现原创 2022-06-21 17:24:54 · 101 阅读 · 0 评论 -
topK问题研讨
topK问题的分类探讨与java实现原创 2022-06-17 15:01:18 · 102 阅读 · 0 评论 -
背包问题的维度扩展
**01背包**01背包问题是最基本的背包问题,其题意可大概描述为一共有N件物品,每件物品都有其相应的体积和价值,给你一个背包,背包有容量上限,怎样往背包中装物品,能让背包中的物品价值最高。此类问题是典型的动态规划问题,动态规划的目标是背包中物品的总价值,动态规划的变量是物品的体积和价值,以及背包的容量上限,经过分析,我们可以定义一下dp状态:dp[ i ][ j ] —— N件物品中以前i件物品为物品总量,当装入背包的物品的总体积为j时,背包中所有物品的总价值dp[ i ][ j ]有两种情况原创 2022-05-23 22:05:11 · 103 阅读 · 0 评论 -
数组随机序列问题shuffle-an-array
**问题**:在一些场合中,我们需要知道模拟真实世界中的随机,一个基础的问题是:怎么在已知数据集上随机返回一个结果。 参考问题:https://leetcode.com/problems/shuffle-an-array/先看一下开源代码中Random的代码```javapublic int nextInt(int bound) { if (bound <= 0) throw new IllegalArgumentException(BadBoun...原创 2022-04-27 22:04:56 · 258 阅读 · 0 评论 -
树形动态规划DP
树形动态规划原创 2022-04-16 20:21:25 · 631 阅读 · 0 评论 -
leetcode1268. Search Suggestions System 前缀树
前缀树解决单词搜索系统翻译 2022-04-11 21:31:31 · 78 阅读 · 0 评论 -
leetcode692
题目描述:给定一个字符串数组,返回出现频率最高的k个字符串思路:先使用map对词频进行统计,再根据map中的value(字符串出现次数)进行降序排序,可以使用优先队列,自定义比较规则代码private static List<String> topK(String[] strings, int k) { List<String> res = new ArrayList<>(); Map<String, Integer> c原创 2022-04-01 17:15:03 · 153 阅读 · 0 评论 -
leetcode 316. Remove Duplicate Letters
题目:Given a string s, remove duplicate letters so that every letter appears once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.Example 1:Input: s = “bcabc”Output: “abc”Example 2:Input原创 2022-03-02 17:59:38 · 135 阅读 · 0 评论 -
Leetcode43
题目描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”提示:1 <= num1.length, num2.length <= 200num1 和 num原创 2022-02-10 14:46:35 · 338 阅读 · 1 评论 -
并查集的介绍与应用
并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。参考算法导论第23章,并查集可以实现在数据量非常庞大时,查询一次的时间复杂度低于6,可以认为查询是一个O(1)的操作。...原创 2021-12-08 16:28:27 · 347 阅读 · 0 评论 -
二叉树的遍历(前序、中序、后序、层次)
概述二叉树的遍历主要有前序遍历、中序遍历、后序遍历、层次遍历其中,前三种遍历常见考察点是递归与非递归,层次遍历的考察点是:是否分层打印。代码递归遍历(前序、中序、后序),包含***由数组构造二叉树***:package 二叉树的遍历;//二叉树遍历的递归实现import java.util.LinkedList;import java.util.List;public class SearchTree { private int[] array = { 1, 2, 3, 4,原创 2021-11-24 22:59:41 · 247 阅读 · 0 评论 -
Leetcode99
题目描述:二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树题目思路:抓住:只有两个节点被错误地交换这句话,我们需要找到这两个节点第一种情况:左右各有一个非法节点,直接交换第二种情况:左右某一边又一个,与根节点交换如何交换交换的本质是:将该节点的前置节点的next指针指向正确的节点,所谓原地交换,因此需要保留问题节点的前置节点代码:class Solution { static TreeNode prev; static TreeNode原创 2021-11-23 19:00:23 · 351 阅读 · 0 评论 -
推箱子游戏解法的数学分析与代码实现(Leetcode1263等未完)
推箱子游戏是将箱子推到目标点,是一个经典的游戏,这个问题存在一个最优解,即最短走法,这里通过分析一个箱子与多个箱子,探讨问题的解法。一个箱子问题链接:leetcode推箱子这个问题是一个阉割版,不考虑人走的步数,只考虑箱子被推到目标位置(前提是人不被卡住)思路...原创 2021-11-22 16:08:05 · 4533 阅读 · 1 评论 -
卡特兰数介绍及其应用
定义组合数学中一个常在各种计数问题中出现的数列,其对应的序列为:C0 = 1,C1 = 1, C2 = 2, C3 = 5, C4 = 14, C5 = 42,C6 = 132, C7 = 429, C8 = 1430, C9 = 4862, C10 = 16796,C11 = 58786, C12 = 208012, C13 = 742900, C14 = 2原创 2021-11-22 14:46:35 · 155 阅读 · 1 评论 -
二叉树的遍历
中序遍历:根左右思路:递归代码: public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); if(root == null) { return res; } if (root.left != null) { res.addAl原创 2021-11-22 14:21:31 · 161 阅读 · 0 评论 -
Leetcode199 二叉树的右视图(直观好理解)
题目链接:https://leetcode-cn.com/problems/binary-tree-right-side-view/思路:层次遍历,找出每层的最右节点, 可以用一个队列来存储每层节点,每次将这层节点弹出完毕,最后节点是最右节点代码: public List<Integer> rightSideView(TreeNode root) { List<Integer> res = new ArrayList<>(); Queue原创 2021-11-19 17:10:10 · 294 阅读 · 0 评论 -
Leetcode4 寻找两个有序数组的中位数(亚马逊北京2019白板面试题)
题目描述:给定两个有序数组,要求找到两个有序数组的中位数思路二分查找:利用数组有序,找到中点数字,然后计算1: 如果 A[k/2−1]<B[k/2−1],则比 A[k/2−1]小的数最多只有 最多只有 k−2个,因此 A[k/2−1] 不可能是第 k个,可排除**2:**A[k/2−1]>B[k/2−1],则可以排除 B[0] 到 B[k/2−1]。3:A[k/2−1]=B[k/2−1],则可以归入第一种情况处理代码 private static double findMid(int原创 2021-11-19 16:31:30 · 59 阅读 · 0 评论 -
Leetcode2034 股票价格波动
给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳 和该时间点股票对应的 价格 。不巧的是,由于股票市场内在的波动性,股票价格记录可能不是按时间顺序到来的。某些情况下,有的记录可能是错的。如果两个有相同时间戳的记录出现在数据流中,前一条记录视为错误记录,后出现的记录 更正 前一条错误的记录。请你设计一个算法,实现:更新 股票在某一时间戳的股票价格,如果有之前同一时间戳的价格,这一操作将 更正 之前的错误价格。找到当前记录里 最新股票价格 。最新股票价格 定义为时间戳最晚的股票价格。找到当原创 2021-11-18 18:33:53 · 245 阅读 · 0 评论 -
Leetcode48 图像旋转
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。思路从数学角度来思考,这个是一个旋转角度的问题, 但是值得注意的是:以中心点((n-1)/2,(n-1)/2)为参考点进行旋转90度,运用数学知识,设初始坐标为(p, k),旋转后位置为 (x, y)原向量 a = (p - (n-1)/2, k - (n-1)/2), 旋转后向量 b = (x - (原创 2021-11-18 12:05:07 · 237 阅读 · 1 评论 -
Leetcode301 Remove Invalid Parentheses
题目描述:Given a string s that contains parentheses and letters, remove the minimum number of invalid parentheses to make the input string valid.Return all the possible results. You may return the answer in any order.删除字符串中不合法的括号,使得删除后的字符串是一个合法的括号,英文字符是干扰项,原创 2021-11-16 16:26:26 · 189 阅读 · 0 评论 -
Leetcode1167 棍棒拼接最少成本
题意:You have some sticks with positive integer lengths.You can connect any two sticks of lengths X and Y into one stick by paying a cost of X + Y. You perform this action until there is one stick rem...原创 2020-03-18 21:06:04 · 154 阅读 · 0 评论 -
Leetcode42 接雨水
题意:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。思路:扫描整个数组,找最高的柱子对应的位置maxIndex,最大值位置左边每个位置的水柱高度只由左边最高和当前高度决定,最大...原创 2019-10-17 22:12:13 · 93 阅读 · 0 评论 -
换零钱的三种解法(Leetcode518解析)
CoinChange 2是动态规划的经典题目,对递归(会超时)改写为动态规划的技巧要求较高。题意:You are given coins of different denominations and a total amount of money. Write a function to compute the number of combinations that make up that a...原创 2019-10-12 21:42:05 · 539 阅读 · 0 评论