![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
wulalalalalalalal
这个作者很懒,什么都没留下…
展开
-
二叉树
226. 翻转二叉树给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例 2:输入:root = [2,1,3]输出:[2,3,1]示例 3:输入:root = []输出:[]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/invert-binary-tree著作权归领扣网络所有。商业转载请联系官方原创 2022-05-31 21:34:34 · 356 阅读 · 0 评论 -
【la】单调栈结构
三级标题public int[] nextGreaterElement(int[] nums) { // 输⼊ nums = [2,1,2,4,3],返回 [4,2,4,-1,-1] Stack<Integer> s = new Stack<>(); int[] res = new int[nums.length]; for (int i = nums.length - 1;i >= 0;i--){原创 2022-04-10 18:20:25 · 166 阅读 · 0 评论 -
【la】三道括号题目
20. 有效的括号简单给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{原创 2022-04-10 10:11:57 · 124 阅读 · 0 评论 -
【la】队列实现栈、栈实现队列
232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列为空,返回 true ;否则,返回 false说明: 你 只能 使用标准的栈操作 —— 也就是只有 p原创 2022-04-09 22:59:34 · 81 阅读 · 0 评论 -
【la】反转链表
92. 反转链表 II给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]来源:力扣(LeetCode)链接:https原创 2022-04-09 15:04:27 · 111 阅读 · 0 评论 -
【la】单链表的六⼤题型
三级标题三级标题三级标题三级标题三级标题三级标题三级标题三级标题原创 2022-04-08 22:29:20 · 579 阅读 · 0 评论 -
【la】原地修改数组
方法:快慢指针26. 删除有序数组中的重复项给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在原创 2022-03-17 15:58:45 · 199 阅读 · 0 评论 -
【la】⽥忌赛⻢
思路:将⻬王和⽥忌的⻢按照战⽃⼒排序,然后按照排名⼀⼀对⽐。如果⽥忌的⻢能赢,那就⽐赛,如果赢不了,那就换个垫底的来送⼈头,保存实⼒。870. 优势洗牌给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。返回 A 的任意排列,使其相对于 B 的优势最大化。 示例 1:输入:A = [2,7,11,15], B = [1,10,4,11]输出:[2,11,7,15]示例 2:输入:A = [12,24原创 2022-03-17 10:58:13 · 348 阅读 · 0 评论 -
【la】二分搜索二
二分搜索步骤1、确定 x, f(x), target 分别是什么,并写出函数 f 的代码。2、找到 x 的取值范围作为⼆分搜索的搜索区间,初始化 left 和 right 变量。3、根据题⽬的要求,确定应该使⽤搜索左侧还是搜索右侧的⼆分搜索算法,写出解法代码。// 函数 f 是关于⾃变量 x 的单调函数int f(int x) { // ...}// 主函数,在 f(x) == target 的约束下求 x 的最值int solution(int[] nums, int target) {原创 2022-03-16 16:27:01 · 79 阅读 · 0 评论 -
【la】二分搜索
以下三种题型「搜索区间」全都统⼀成两端都闭,好记,注意修改 nums[mid] == target 条件处的代码和返回的逻辑。统一模板:int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < target) {原创 2022-03-15 15:46:34 · 69 阅读 · 0 评论 -
【la】滑动窗⼝算法
76. 最小覆盖子串给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"示例 2:输入:s = "a", t = "原创 2022-03-14 21:09:30 · 814 阅读 · 0 评论 -
【la】差分数组
差分数组概述1. 应用场景频繁对原始数组的某个区间的元素进⾏增减。给你输⼊⼀个数组 nums,给nums[i…j] 加上 val。2. 差分数组使用方法2.1 构造差分数组对 nums 数组构造⼀个 diff 差分数组,diff[ i ] = nums[ i ] - nums[ i - 1 ]int[] diff = new int[nums.length];// 构造差分数组diff[0] = nums[0];for (int i = 1; i < nums.length;原创 2022-03-12 14:24:42 · 249 阅读 · 1 评论 -
【la】前缀和数组
1. 303. 区域和检索 - 数组不可变给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 , 其中 left <= right 实现 NumArray 类: NumArray(int[] nums) 使用数组 nums 初始化对象 int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的原创 2022-03-12 08:31:25 · 215 阅读 · 0 评论 -
数据结构(二)Trie树+并查集+堆
1. Trie字符串统计 (Trie树)Trie树作用:高效地存储和查找字符串集合的数据结构。维护一个字符串集合,支持两种操作:(1)I x 向集合中插入一个字符串 x ;(2)Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总长度不超过 10^5 ,字符串仅包含小写英文字母。输入格式第一行包含整数 N ,表示操作数。 接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。输出格式对于每个询问指令 Q x,都要输出一个整数作为结果,原创 2022-02-08 23:45:28 · 698 阅读 · 0 评论 -
week2 双指针算法
1. 数组元素的目标和 (双指针算法)800.给定两个升序排序的有序数组 A 和 B,以及一个目标值 x 。数组下标从 0 开始。请你求出满足 A[i]+B[j]=x 的数对 (i,j)。数据保证有唯一解。输入格式第一行包含三个整数 n,m,x ,分别表示 A 的长度,B 的长度以及目标值 x 。第二行包含 n 个整数,表示数组 A 。第三行包含 m 个整数,表示数组 B 。输出格式共一行,包含两个整数 i 和 j。数据范围数组长度不超过 10^5 。同一数组内元素各不相同。原创 2022-02-06 22:04:59 · 79 阅读 · 0 评论 -
第二章 数据结构(一)链表、栈、队列、单调栈、单调队列、KMP
1 链表用数组模拟链表:单链表、双链表用 e[i] 表示第 i 个节点的值,ne[i] 表示第 i 个节点下一个节点的下标。e[0] = 3 , ne[0] = 1;…e[3] = 9 , ne[3] = -1.e和ne都是整数数组,空节点的下标用-1来表示,head表示第一个节点的下标。// head 表示头节点的下标// e[N] 表示节点 i 的值// ne[i] 表示节点 i 下一个节点的下标// idx 存储当前已经用到了哪个点 (尾节点的下一点,那个空的节点) i原创 2022-01-27 00:27:48 · 935 阅读 · 0 评论 -
LC1.4 回文数、正则表达式匹配
1 回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-numberclass Solu原创 2022-01-19 17:39:23 · 714 阅读 · 0 评论 -
LC1.3 整数反转、字符串转换整数 (atoi)
1. 整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-integerclass Solution {public: int reverse(int x) {原创 2022-01-16 20:01:55 · 108 阅读 · 0 评论 -
LC 1.2 寻找两个正序数组的中位数、最长回文子串、Z 字形变换
1. 寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/median-of-two-sorted-array原创 2022-01-15 23:15:45 · 226 阅读 · 0 评论 -
LC 1.1 两数之和、两数相加、无重复字符的最长子串
1. 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。来源:力扣(LeetCode)链接:https://l原创 2022-01-14 16:56:28 · 133 阅读 · 0 评论 -
第一章 基础算法(三) 双指针、位运算、离散化、区间合并
1 双指针算法(一)两类双指针算法:有两个指针分别指向两个序列;有两个指针指向一个序列;(二)双指针算法通用模板: for(i = 0,j = 0;i < n;i++) { while(j < i && check(i,j)) j ++; // 每道题目的具体逻辑 } (三)核心思想:将如下算法,时间复杂度是O(n^2)for(i = 0;i < n;i++) for(j = 0;j < n;j++)优化到O(n)(三原创 2022-01-10 10:31:26 · 356 阅读 · 0 评论 -
第k个数+逆序对+三次方根
三级目录三级目录三级目录原创 2022-01-08 13:38:58 · 573 阅读 · 0 评论 -
第一章 基础算法(二)高精度、前缀和、差分
1. 高精度1. 三类高精度问题:(1) 大整数A + 大整数B;(2)大整数A - 大整数B;(3)大整数A * 小正数a;(4)A/b2. 大整数的位数:小于 10 ^ 6;小整数的大小:小于 10000。3. 大整数如何存储:存储在数组中,数组的每一位存一位数字,数组的第0位存大整数的个位期中用到的c++知识:vector在 c++ 中,vector 是一个十分有用的容器。它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压原创 2022-01-03 18:39:12 · 549 阅读 · 0 评论 -
第一章 基础算法(一)快排、归并、二分
1. 排序1.1 快速排序 —— 分治(一)步骤确定分界点 x :(1)q[ l ](2)q[ ( l + r ) / 2 ](3)q[ r ](4)随机[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6aD4JIK7-1630485387682)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20210807215202118.png)]调整区间 :保证区间左边的数小于等于原创 2021-09-01 18:16:47 · 188 阅读 · 1 评论