算法
zjshuster
昵称即是163邮箱前缀,欢迎交流
展开
-
最小栈问题
思路是可以借助一个辅助栈,辅助栈与原始栈存储相同多的元素,对应位置是从栈底到当前栈顶这个区间的最小值,即当前栈的最小元素。设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。--> 返回 -3.minStack.getMin();--> 返回 -2.void push(int val) 将元素val推入堆栈。int getMin() 获取堆栈中的最小元素。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。原创 2024-07-07 07:00:00 · 349 阅读 · 0 评论 -
1116. 打印零与奇偶数
解释:三条线程异步执行,其中一个调用 zero(),另一个线程调用 even(),最后一个线程调用odd()。此题与1115很像,都是线程的交替执行问题,不同的是有三个线程,可以用同步信号量来实现交替打印。void zero(printNumber) 调用 printNumber 以输出一个 0。” ,其中序列的长度必须为 2n。void odd(printNumber) 调用 printNumber 以输出奇数。线程 A:调用 zero() ,只输出 0。线程 C:调用 odd() ,只输出奇数。原创 2024-07-06 16:51:15 · 374 阅读 · 0 评论 -
简易银行交易系统
交易有效时,我们将账号 account1 的余额减少 money,账号 account2 的余额增加 money。boolean transfer(int account1, int account2, long money) 从编号为 account1 的账户向编号为 account2 的账户转帐 money 美元。如果要进行操作的帐号不在已有的帐号中,即 account>n,那么交易无效。// 账户 5 的余额为 $30 - $20 = $10 ,账户 1 的余额为 $10 + $20 = $30。原创 2024-07-04 11:18:33 · 1062 阅读 · 0 评论 -
Leetcode1115 交替打印 FooBar及其测试
解释:这里有两个线程被异步启动。其中一个调用 foo() 方法, 另一个调用 bar() 方法,“foobar” 将被输出一次。请设计修改程序,以确保 “foobar” 被输出 n 次。线程 A 将会调用 foo() 方法,而。可以使用同步信号量的奇偶来来实现交替打印。解释:“foobar” 将被输出两次。线程 B 将会调用 bar() 方法。输出:“foobarfoobar”输出:“foobar”原创 2024-07-02 21:41:26 · 283 阅读 · 0 评论 -
Leetcode 131 分割回文串
字符串的分割方案F(s)是一个可以拆分为子问题的问题,我们设原字符串的长度为n, 考查以当前位置i为起始点的字符串s[i][n], 对应的分割方案结果集为F(s[i][n]),若子字符串s[i][j]是回文串,那么原问题的一个子集可以表示为 {s[i][j] , s[j][n] }.所以求字符串 s的所有子字符串,这个过程也是一个动态规划,求解 f[i][j] 的时候,为了利用上前置已求得的答案,注意i是递减的, j是递增的。输出:[[“a”,“a”,“b”],[“aa”,“b”]]输出:[[“a”]]原创 2024-07-01 19:02:42 · 308 阅读 · 0 评论 -
Leetcode 78 数组子集
给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:nums 中的所有元素 互不相同。原创 2024-06-30 15:55:15 · 357 阅读 · 0 评论 -
Leetcode 39 组合之和问题
Leetcode 39 组合之和问题原创 2023-03-07 21:25:47 · 85 阅读 · 0 评论 -
leetcode 15 三数之和
三数之和原创 2023-02-23 20:37:58 · 144 阅读 · 0 评论 -
Leetcode 1071 字符串的最大公约数
leetcode1071原创 2023-02-06 21:48:53 · 166 阅读 · 0 评论 -
Leetcode 149 max points
Leetcode 149, 算法原创 2023-02-01 20:34:31 · 97 阅读 · 0 评论 -
leetcode124二叉树最大路径和
leetcode 124, 二叉树最大路径和,树形dp求解原创 2022-11-29 20:30:35 · 125 阅读 · 0 评论 -
leetcode 1488
leetcode1488,treemap, 贪心原创 2022-11-18 14:35:23 · 685 阅读 · 0 评论 -
Leetcode215 Kth Largest Element in an Array
Leetcode215。数组中第k大原创 2022-11-13 21:21:59 · 345 阅读 · 0 评论 -
Leetcode899 有序队列Orderly Queue
Leetcode 899 有序队列原创 2022-11-13 20:51:21 · 301 阅读 · 0 评论 -
Leetcode34 有序数组元素查找Find First and Last Position of Element in Sorted Array
有序数组二分查找原创 2022-11-09 21:56:03 · 290 阅读 · 0 评论 -
链表入环节点的查找
链表入环节点原创 2022-11-08 10:32:28 · 204 阅读 · 0 评论 -
加密解密简介
对称与非对称加解密原创 2021-12-31 16:42:40 · 1136 阅读 · 0 评论 -
骑士救公主
骑士救公主、二维数组遍历查询原创 2022-10-07 22:50:13 · 217 阅读 · 0 评论 -
最小差值问题(数组、二叉树)
数组、二叉树最小差值问题原创 2022-10-07 20:22:20 · 311 阅读 · 0 评论 -
最长上升子序列LIS
最长上升子序列原创 2022-08-09 15:52:42 · 151 阅读 · 0 评论 -
【博弈论系列算法】
先手必胜算法原创 2022-07-16 11:40:04 · 826 阅读 · 0 评论 -
leetcode406 重建身高队列
leetcode 有条件排序原创 2022-07-06 16:37:30 · 141 阅读 · 0 评论 -
跳表的设计与应用场景
skiplist原创 2022-06-30 15:52:25 · 1055 阅读 · 0 评论 -
系统设计之HashSet
Set简单实现原创 2022-06-21 17:24:54 · 119 阅读 · 0 评论 -
topK问题研讨
topK问题的分类探讨与java实现原创 2022-06-17 15:01:18 · 126 阅读 · 0 评论 -
背包问题的维度扩展
**01背包**01背包问题是最基本的背包问题,其题意可大概描述为一共有N件物品,每件物品都有其相应的体积和价值,给你一个背包,背包有容量上限,怎样往背包中装物品,能让背包中的物品价值最高。此类问题是典型的动态规划问题,动态规划的目标是背包中物品的总价值,动态规划的变量是物品的体积和价值,以及背包的容量上限,经过分析,我们可以定义一下dp状态:dp[ i ][ j ] —— N件物品中以前i件物品为物品总量,当装入背包的物品的总体积为j时,背包中所有物品的总价值dp[ i ][ j ]有两种情况原创 2022-05-23 22:05:11 · 126 阅读 · 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 · 281 阅读 · 0 评论 -
树形动态规划DP
树形动态规划原创 2022-04-16 20:21:25 · 660 阅读 · 0 评论 -
leetcode1268. Search Suggestions System 前缀树
前缀树解决单词搜索系统翻译 2022-04-11 21:31:31 · 138 阅读 · 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 · 164 阅读 · 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 · 161 阅读 · 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 · 359 阅读 · 1 评论 -
并查集的介绍与应用
并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。参考算法导论第23章,并查集可以实现在数据量非常庞大时,查询一次的时间复杂度低于6,可以认为查询是一个O(1)的操作。...原创 2021-12-08 16:28:27 · 370 阅读 · 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 · 277 阅读 · 0 评论 -
Leetcode99
题目描述:二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树题目思路:抓住:只有两个节点被错误地交换这句话,我们需要找到这两个节点第一种情况:左右各有一个非法节点,直接交换第二种情况:左右某一边又一个,与根节点交换如何交换交换的本质是:将该节点的前置节点的next指针指向正确的节点,所谓原地交换,因此需要保留问题节点的前置节点代码:class Solution { static TreeNode prev; static TreeNode原创 2021-11-23 19:00:23 · 373 阅读 · 0 评论 -
推箱子游戏解法的数学分析与代码实现(Leetcode1263等未完)
推箱子游戏是将箱子推到目标点,是一个经典的游戏,这个问题存在一个最优解,即最短走法,这里通过分析一个箱子与多个箱子,探讨问题的解法。一个箱子问题链接:leetcode推箱子这个问题是一个阉割版,不考虑人走的步数,只考虑箱子被推到目标位置(前提是人不被卡住)思路...原创 2021-11-22 16:08:05 · 4984 阅读 · 2 评论 -
卡特兰数介绍及其应用
定义组合数学中一个常在各种计数问题中出现的数列,其对应的序列为: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 · 185 阅读 · 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 · 175 阅读 · 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 · 313 阅读 · 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 · 76 阅读 · 0 评论