
算法题
算法题
bm1998
这个作者很懒,什么都没留下…
展开
-
算法题汇总
1. 数组算法题——合并区间2. 链表链表中的节点每k个一组翻转3. 队列无重复字符的最长子串4. 哈希表两数之和5. 字符串有效的括号6. 树最近公共祖先7. 双指针合并两个有序数组接雨水三数之和8. 动态规划最长回文子串9. 贪心算法买卖股票的最佳时机10. 数学求的平方根11. 其他设计LRU缓存结构...原创 2021-04-28 00:09:40 · 193 阅读 · 0 评论 -
算法题——最长递增子序列
1. 本题知识点动态规划2. 题目描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。3. 解题思路本题可以看做是一个多阶段决策找最优解的问题,因此可以用典型的动态规划思原创 2021-04-28 11:54:37 · 599 阅读 · 0 评论 -
算法题——二叉树的右视图
1. 本题知识点二叉树2. 题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---3. 解题思路使用层次遍历,将每一层的最后一个结点加入返回结果中。4. 代码publ原创 2021-04-28 11:00:40 · 114 阅读 · 0 评论 -
算法题——合并区间
1. 本题知识点数组2. 题目描述以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].3. 解题思路对二维数组第一个元素原创 2021-04-28 00:03:30 · 388 阅读 · 0 评论 -
算法题——三数之和
1. 本题知识点双指针2. 题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]3. 解题思路对数组进行排序创建 Set 进行去重遍历数组,固定 num[i],移动双指针移动双指针,将符合的元素加入 Set将 Set 转换为原创 2021-04-27 22:37:41 · 217 阅读 · 0 评论 -
算法题——链表中的节点每k个一组翻转
1. 本题知识点链表2. 题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]输入:head = [1,2,3,4,5], k = 3输出:[3原创 2021-04-27 16:04:49 · 821 阅读 · 0 评论 -
算法题——设计LRU缓存结构
1. 本题知识点LRU2. 题目描述设计 LRU 缓存结构,该结构在构造时确定大小,假设大小为 K,并有如下两个功能set(key, value):将记录 (key, value) 插入该结构get(key):返回 key 对应的 value 值[要求]set 和 get 方法的时间复杂度为 O(1)某个 key 的 set 或 get 操作一旦发生,认为这个 key 的记录成了最常使用的。当缓存的大小超过 K 时,移除最不经常使用的记录,即 set 或 get 最久远的。若 o原创 2021-04-27 11:35:48 · 191 阅读 · 0 评论 -
算法题——最长回文子串
1. 本题知识点动态规划2. 题目描述给你一个字符串 s,找到 s 中最长的回文子串。输入:s = "cbbd"输出:"bb"3. 解题思路首先找子串,设置左右边界,移动边界找子串判断子串是否回文,使用 boolean 类型的二维数组记录是否回文a...ai jdp[i,j] = s[i]==s[j] && s[i+1]==s[j-1]4. 代码public class Solution { public String longe原创 2021-04-25 23:44:55 · 113 阅读 · 0 评论 -
算法题——接雨水
1. 本题知识点双指针2. 题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 1:输入:[0,1,0,2,1,0,1,3,2,1,2,1]输出:63. 解题思路找出最高点,分别从两边往最高点遍历:如果下一个数比当前数小,说明可以接到水4. 代码public class Sol原创 2021-04-25 21:22:32 · 311 阅读 · 0 评论 -
算法题——最近公共祖先
1. 本题知识点深度优先遍历2. 题目描述给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。3. 解题思路最近公共祖先和 o1,o2 有三种关系:o1,o2 分别在祖先左右两侧祖先是 o1,o2 在祖先左/右侧祖先是 o2,o1 在祖先左/右侧使用 dfs 深度遍历,如果节点为 o1,o2 中其中一个直接返回,如果节点超过叶子节点也返回4. 代码public class Solution { /** *原创 2021-04-24 15:55:11 · 327 阅读 · 0 评论 -
算法题——求平方根
1. 本题知识点数学2. 题目描述实现函数 int sqrt(int x).计算并返回x的平方根(向下取整)3. 解题思路如果一个数 i,i * i 小于 n,(i + 1) * (i + 1)大于 n,那么这个数就是 n 的平方根。4. 代码public class Solution { /** * * @param x int整型 * @return int整型 */ public int sqrt (int x) {原创 2021-04-24 12:15:41 · 469 阅读 · 0 评论 -
算法题——买股票的最佳时机
1. 本题知识点贪心算法2. 题目描述假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。3. 解题思路遍历数组,维护两个变量,一个是最小买入价格,一个是最大利润。4. 代码public class Solution { /** * * @param prices int整型一维数组 * @return int整型 */ p原创 2021-04-24 10:58:00 · 321 阅读 · 0 评论 -
算法题——有效的括号
1. 本题知识点字符串2. 题目描述给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。3. 解题思路‘()’,’[]’,’{}’ 替换为 ‘’,最后字符串为空就 true4. 代码public class Solution { /** * * @param s string字符串 * @原创 2021-04-24 03:10:43 · 238 阅读 · 0 评论 -
算法题——合并两个有序的数组
1. 本题知识点双指针2. 题目描述给出两个有序的整数数组 A 和 B,请将数组 A 合并到数组 B 中,变成一个有序的数组注意:可以假设 A 数组有足够的空间存放 B 数组的元素,A 和 B 中初始的元素数目分别为 m 和 n3. 解题思路从后往前看,在每一个位置上选择 A 和 B 中较小的那一个。4. 代码public class Solution { public void merge(int A[], int m, int B[], int n) { for原创 2021-04-24 02:39:43 · 389 阅读 · 0 评论 -
算法题——两数之和
1. 本题知识点哈希表2. 题目描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数 twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于 index2.。注意:下标是从 1 开始的。假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=23. 解题思路遍历数组,用哈希表存储数组的数据和它的下标在遍历数组的过程中,判断是否存在两个原创 2021-04-24 01:45:25 · 244 阅读 · 0 评论 -
算法题——最长无重复子串
1. 本题知识点队列2. 题目描述给定一个数组 arr,返回 arr 的最长无的重复子串的长度(无重复指的是所有数字都不相同)。3. 解题思路用一个队列,把元素不停的加入到队列中,如果有相同的元素,就把队首的元素移除,这样我们就可以保证队列中永远都没有重复的元素。4. 代码public class Solution { /** * * @param arr int整型一维数组 the array * @return int整型 */ p原创 2021-04-24 00:27:02 · 218 阅读 · 0 评论