元素offer 083 ii

Leetcode(剑指offer专项训练)——DFS/BFS专项(2)

课程顺序 题目 现在总共有 numCourses 门课需要选,记为 0 到 numCourses-1。 给定一个数组 prerequisites ,它的每一个元素 prerequisites[i] 表示两门课程之间的先修顺序。 例如 prerequisites[i] = [ai, bi] 表示想要学 ......
专项 Leetcode offer DFS BFS

Leetcode(剑指offer专项训练)——DP专项(8)

最长递增路径 题目 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。 链接 DP 但是依旧不能覆盖所有的情况 class Solution { pub ......
专项 Leetcode offer

《剑指Offer》算法汇总-helloxf

package javaTest.javaBase.算法; import sun.plugin.javascript.navig.Array; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.C ......
算法 helloxf Offer

剑指offer05(Java)-替换空格(简单)

题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = "We are happy."输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 来源:力扣(LeetCode)链接:https://leetcode.cn/pr ......
空格 offer Java 05

2607. 使子数组元素和相等

题目链接:2607. 使子数组元素和相等 方法:分组 + gcd + 中位数 解题思路 题意:将$arr$中某个元素$+1$或$-1$,使得任意长度为$k$的子数组的元素总和相等,且总操作数最少; 1、首先考虑数组$arr$为非循环数组: 任意$k$长的子数组总和相等,则有下述情形,依次可以将$ar ......
数组 元素 2607

剑指 Offer 56 - II. 数组中数字出现的次数 II

题目链接:剑指 Offer 56 - II. 数组中数字出现的次数 II 方法一:位运算 解题思路 由题意知,其他数值都出现了三次,那么其数值二进制位上的$1$也至少出现了三次,那么我们可以统计数值每一位上$1$的个数的总和,然后遍历每一位上$1$的数量,若某一位上的$1$的数量不能被$3$整除,说 ......
数组 次数 数字 Offer II

剑指 Offer 57 - II. 和为s的连续正数序列

题目链接:剑指 Offer 57 - II. 和为s的连续正数序列 方法一:同向双指针 解题思路 使用两个双指针维护一个窗口,设窗口中元素的和为$curSum$。当$curSum > target$时,左指针右移一位;当$curSum < target$时,右指针右移一位;当$curSum == t ......
正数 序列 Offer 57 II

剑指 Offer 56 - I. 数组中数字出现的次数

题目链接:剑指 Offer 56 - I. 数组中数字出现的次数 方法:位运算 + 分类 解题思路 异或运算:当两个相同的数异或时,结果为$0$; 对于本题,假设答案为$res1$ 和 $res2$,那么对数组中所有的数求异或时,其结果实际等于 $res1$ ^ $res2$;并且此结果中二进制位为 ......
数组 次数 数字 Offer 56

剑指 Offer 49. 丑数

题目链接:剑指 Offer 49. 丑数 方法:动态规划 解题思路 参考:剑指 Offer 49. 丑数(动态规划,清晰图解) 代码 class Solution { public: int nthUglyNumber(int n) { int a = 0, b = 0, c = 0; int dp ......
Offer 49

6357. 使数组元素全部相等的最少操作次数

题目链接:6357. 使数组元素全部相等的最少操作次数 方法:排序 + 前缀和 + 二分查找 解题思路 初始化$target = queries[i]$,根据题意,对于每次询问要将数组$nums$中的元素$=>target$,那么对于小于等于$target$的元素要加上一个数,而大于$target$ ......
数组 元素 次数 6357

剑指 Offer 46. 把数字翻译成字符串

题目链接:剑指 Offer 46. 把数字翻译成字符串 方法:回溯、动态规划 解题思路 动态规划是回溯中“归”的过程; 思考回溯: (1)将$num$转换为字符串$s$; (2)对于当前位置$i$,可能有两种操作,将$s[i] => 字符$ 或 将$s[i, i + 1] => 字符$,即$dfs( ......
字符串 字符 数字 Offer 46

剑指 Offer 48. 最长不含重复字符的子字符串

题目链接:剑指 Offer 48. 最长不含重复字符的子字符串 方法:同向双指针 解题思路 初始化l = 0, r = 0; 右指针右移,直到[l, r]之间出现重复字符,然后将左指针右移,直到[l, r]之间没有重复字符; 即保证[l, r]窗口无重复字符,然后计算最大的窗口长度。 代码 clas ......
字符 字符串 Offer 48

剑指 Offer 52. 两个链表的第一个公共节点

题目链接:剑指 Offer 52. 两个链表的第一个公共节点 方法一:两次遍历 解题思路 将两个单链表的遍历指针先置于同一起跑线(相对于相交的点),然后会同时遍历到相交的节点。 注意:模拟下方代码即可理解,第一次遍历长度为长的链表长度,第二次遍历长度为短的链表长度。 代码 class Solutio ......
节点 两个 Offer 52

剑指 Offer 42. 连续子数组的最大和

题目链接:剑指 Offer 42. 连续子数组的最大和 方法:动态规划 解题思路 参考动态规划详细解析——剑指 Offer 42. 连续子数组的最大和 注意: 很多同学首先会想到同向双指针,实际上本题由于$nums$数组的某一个元素的下一个元素可正可负,导致同向双指针要求的单调性无法满足; 使用$d ......
数组 Offer 42

剑指 Offer 44. 数字序列中某一位的数字

题目链接:剑指 Offer 44. 数字序列中某一位的数字 方法:找规律 解题思路 找第$n$位对应的数为几位数; 找该数的具体值; 找第$n$位在该数中的第几位。 {:style="width:500px"} 代码 class Solution { public: int findNthDigit ......
数字 序列 Offer 44

剑指 Offer 41. 数据流中的中位数

题目链接:剑指 Offer 41. 数据流中的中位数 方法一:插入排序 解题思路 每次添加一个数字时,通过插入排序添加,需要返回中位数时,根据元素个数进行返回。 代码 class MedianFinder { private: vector<int> nums; public: /** initia ......
中位数 数据流 数据 Offer 41

剑指 Offer 40. 最小的k个数

题目链接:剑指 Offer 40. 最小的k个数 方法:排序 解题思路 基于比较的排序,最低时间复杂度为$O(nlogn)$,空间复杂度为$O(1)$; 哈希计数,时间复杂度为$O(n)$,但需要额外的空间。 代码 // 基于比较的排序 class Solution { public: vector ......
个数 Offer 40

剑指 Offer 37. 序列化二叉树

题目链接:剑指 Offer 37. 序列化二叉树 取巧做法 class Codec { private: TreeNode* root; public: // Encodes a tree to a single string. string serialize(TreeNode* root) { ......
序列 Offer 37

剑指 Offer 36. 二叉搜索树与双向链表

题目链接:剑指 Offer 36. 二叉搜索树与双向链表 方法一:回溯 解题思路 {:width=1000} 代码 class Solution { private: int mx = INT_MIN, mi = INT_MAX; Node* start = NULL, * end = NULL; ......
双向 Offer 36

剑指 Offer 33. 二叉搜索树的后序遍历序列

题目链接:剑指 Offer 33. 二叉搜索树的后序遍历序列 方法:分治 解题思路 首先假设该序列能够构成某个二叉搜索树的后序遍历序列,那么这个序列会被分成3个部分:左子树序列,右子树序列,父节点,其中左右子树节点数可能为0; 现在就可以检查该序列是否符合这个规律,然后递归的判断子树是否符合规律。 ......
序列 Offer 33

剑指 Offer 51. 数组中的逆序对

题目链接:剑指 Offer 51. 数组中的逆序对 方法一:归并排序 解题思路 逆序对:即后面的数大于前面的数; 归并排序: 先分,在此过程中会先递归的将序列分为一段一段序列,并且每段序列之间的先后顺序是不变的。 再治,也即归并,归并的过程中会将两段序列进行比较$(A,B,B在A的后面)$,当出现$ ......
逆序 数组 Offer 51

剑指 Offer 20. 表示数值的字符串

题目链接:剑指 Offer 20. 表示数值的字符串 方法:模拟 解题思路 根据题意模拟,详情见代码注释。 代码 class Solution { public: bool isDecimal(string s){ int first_symbol = s.find_first_of('.'); / ......
字符串 数值 字符 Offer 20

剑指 Offer 47. 礼物的最大价值

题目链接:剑指 Offer 47. 礼物的最大价值 方法:动态规划 解题思路 $当前位置的最大价值 = max(上方格子的最大价值,左边格子的最大价值) + 当前位置的价值$,即局部最优可以推出全局最优,简单递推即可。 代码 class Solution { public: int maxValue ......
礼物 价值 Offer 47

PAT Basic 1075. 链表元素分类

PAT Basic 1075. 链表元素分类 1. 题目描述: 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为 18→7→-4→0→5→-6→10 ......
元素 Basic 1075 PAT

部署IIS后访问共享文件失败

在本地调试时没有问题,但是部署到IIS后操作共享文件的时候失败,压根找不到目录。 在和共享文件服务器已经建立连接的情况下,本地调试通过的情况,猜测应该是部署后权限出现了问题,IIS 的权限不够导致的。 尝试了以下几种方法,我用第三种方法可行,可能因为我这边是内网环境,环境不同处理的方式也不太一样,简 ......
文件 IIS

1096. 花括号展开 II

题目链接:1096. 花括号展开 II 方法:DFS由内向外展开 解题思路 ylb:[Python3/Java/C++/Go/TypeScript] 一题一解:递归(简洁代码) 代码 class Solution { private: set<string> s; void dfsBrace(str ......
括号 1096 II

剑指 Offer 19. 正则表达式匹配

题目链接:剑指 Offer 19. 正则表达式匹配 方法:动态规划 解题思路 详情见:逐行详细讲解,由浅入深,dp和递归两种思路 代码 class Solution { public: bool isMatch(string s, string p) { int n = s.size(), m = ......
正则 表达式 Offer 19

2574. 左右元素和的差值

题目链接:2574. 左右元素和的差值 方法:前缀和 + 后缀和 解题思路 第一遍算出 $nums$ 数组前缀和,第二遍计算 $answer$ 数组。 代码 class Solution { public: vector<int> leftRigthDifference(vector<int>& n ......
差值 元素 2574

1144. 递减元素使数组呈锯齿状

题目链接:1144. 递减元素使数组呈锯齿状 方法:找规律 + 模拟 解题思路 对于一个整数数组 $nums$,可以转换为题目中两种锯齿数组,对于两种情况的转换取最小值。 并且由于操作只能将一个元素减1,因此: 对于第1种情况,只用下标为奇数的元素需要减小到比两边最小值小1; 对于第2种情况,只用下 ......
锯齿状 锯齿 数组 元素 1144

1140. 石子游戏 II

题目链接:1140. 石子游戏 II 方法一:dfs(超时) 解题思路 题目要求$Alice$取得的石子数尽可能的多,那么就要使得$Bob$取得的石子尽可能的少,但是$Bob$也想要取得更多的石子,因此$Alice$在每次选取时,要使得在此种选取方法下,$Bob$能取的石子数最小。 现定义$dfs( ......
石子 1140 II