![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
asjodnobfy
这个作者很懒,什么都没留下…
展开
-
144.145.二叉树的前序后序遍历(递归)
解题思路前序遍历:先遍历根节点再遍历左子树(递归)再遍历右子树(递归)递归函数的三个要点:确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(in原创 2021-10-08 15:34:49 · 81 阅读 · 0 评论 -
71.简化路径
https://leetcode-cn.com/problems/simplify-path/解题思路先拆分(通过 / ),再拼接双端队列Deque用于存储被/拆分开的文件或者文件名需要判断"." “” 和"…"的情况再通过StringBuilder进行拼接需要判断什么时候可以在尾部添加 /代码class Solution { public String simplifyPath(String path) { //双端队列 Deque<Str原创 2021-10-06 09:57:31 · 80 阅读 · 0 评论 -
347.前k个高频元素(优先队列)
这两天的优先队列搞得我有点懵解题思路//1. 需要统计元素出现的频率:使用Map//2. 需要筛选出前k个频率最高的元素:即维护一个最小顶堆,每次弹出的都是最小的,保留下来的是前k个频率最大的元素代码class Solution { //1. 需要统计元素出现的频率:使用Map //2. 需要筛选出前k个频率最高的元素:即维护一个最小顶堆,每次弹出的都是最小的,保留下来的是前k个频率最大的元素 public int[] topKFrequent(int[] nums,原创 2021-10-05 10:05:44 · 114 阅读 · 0 评论 -
239. 滑动窗口最大值
https://leetcode-cn.com/problems/sliding-window-maximum/什么是优先队列?普通队列:按顺序的 FIFO,通过线性结构实现优先队列:不论入队顺序,按照优先级顺序出队,通过堆结构实现二叉堆性质:1.最大堆的堆顶是整个堆中的最大元素2.最小堆的堆顶是整个堆中的最小元素因此,可以用最大堆来实现最大优先队列,每一次入队操作就是堆的插入操作,每一次出队操作就是删除堆顶节点。二叉堆节点上浮和下沉的时间复杂度:O(logn),所以优先队列入队和出队的时间原创 2021-10-03 11:22:40 · 54 阅读 · 0 评论 -
150.逆波兰表达式求值
解题思路遍历tokens,遇到数字入栈,遇到运算符号,从栈中取出两个数组经过运算以后,将结果入栈代码(Java)class Solution { public int evalRPN(String[] tokens) { //栈 Deque<Integer> stack= new LinkedList<>(); //遍历tokens for(int i=0; i<tokens.length; i+原创 2021-10-02 15:24:10 · 54 阅读 · 0 评论 -
1047.删除字符串中的所有相邻重复项
https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/解题思路利用栈遍历字符串中的所有字符如果栈为空,直接入栈否则判断该字符是否与栈顶元素相同如果两字符相同,删除栈顶元素如果两字符不同,将当前字符入栈最后留下的栈内字符都是相邻不重复的字符由于Deque是双向队列,可以从队尾弹出字符,并添加到StringBuffer对象中.最终将StringBuffer通过toString()方法返回字符串代码(原创 2021-10-02 14:44:48 · 67 阅读 · 0 评论 -
20.有效的括号
题目https://leetcode-cn.com/problems/valid-parentheses/解题思路用栈解决:碰到左括号,就把对应的右括号入栈。否则拦截出栈元素(有括号)与遍历的右括号不相同情况,以及栈为空情况(左右括号个数不匹配),返回FALSE否则判断出栈元素与遍历的元素是否一致Java的Deque:定义双向队列:支持插入删除元素的线性集合。java官方文档推荐用deque实现栈(stack)。参考:https://blog.csdn.net/onedegree/a原创 2021-09-30 11:14:44 · 59 阅读 · 0 评论 -
209.长度最小的子数组(滑动窗口)
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4] 输出:1 示例 3:输入.原创 2021-08-18 09:18:55 · 66 阅读 · 0 评论 -
844.比较含退格的字符串
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = “ab#c”, T = “ad#c” 输出:true 解释:S 和 T 都会变成 “ac”。 示例 2:输入:S = “ab##”, T = “c#d#” 输出:true 解释:S 和 T 都会变成 “”。 示例 3:输入:S = “a##c”, T = “#a#c” 输出:true 解释:S 和 T 都会变成.原创 2021-08-16 09:02:32 · 70 阅读 · 0 评论 -
283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路移动元素,使用快慢指针。快指针用于从0开始寻找目标对象.原创 2021-08-15 09:11:47 · 69 阅读 · 0 评论 -
NSGA-II 原理
NSGA-II的由来就不说了,好多地方都有人讲。由于NSGA-II也是一种遗传算法。所以先补充一下基本遗传算法的三种基本遗传算子:选择算子:个体被选择参与繁殖的概率交叉算子:交叉基因的概率变异算子:基因发生突变的概率基本遗传算法的五要素:参数编码初始群体设定适应度函数的的设计遗传操作的设计控制参数设定废话结束图中左侧的Pt是原始种群,也即父代种群,也即初始化的数据。它包含了一定数量个体,每个个体基因(即参数)都不同。Qt是后代种群,是通过混合了性能更好的个体基因和引起变原创 2021-08-11 11:43:03 · 6127 阅读 · 10 评论 -
26.删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nu.原创 2021-08-14 09:40:18 · 54 阅读 · 0 评论