【动态规划算法题记录】最长/最大 问题汇总 (leetcode)

news/2024/9/18 12:05:46/ 标签: 算法, 动态规划, leetcode

目录

  • 32. 最长有效括号
    • 思路
    • 代码
  • 300. 最长递增子序列
    • 思路
    • 代码
  • 674. 最长连续递增序列
    • 思路1:双指针
    • 代码1:双指针
    • 思路2:dp
    • 代码2:dp
  • 718. 最长重复子数组
    • 思路1:dp
    • 代码1:dp
    • 思路2:dp优化
    • 代码2:dp优化
  • 1143. 最长公共子序列
    • 思路
    • 代码
  • 1035. 不相交的线(最大连线数)
    • 思路
    • 代码
  • 53. 最大子序和
    • 思路1:贪心
    • 代码1:贪心
    • 思路2:dp
    • 代码2:dp
  • 516. 最长回文子序列
    • 思路
    • 代码
  • 5. 最长回文子串
    • 思路
    • 代码

32. 最长有效括号

题目🔗

给你一个只包含 '('')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

示例 1
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"
示例 2
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"
示例 3
输入:s = ""
输出:0

思路

首先,我们定义一个dp数组,表示以第i个元素结尾的字符串的最长有效括号的长度。

对于dp[i]来说,它可能有以下两种情况:

  • s[i] == '(':这时他是无法和前面的括号组成有效括号对的,所以dp[i] = 0
  • s[i] == ')':这时我们需要确定它是否能和前面的元素组成有效括号对,那么还需要去观察s[i-1]
    • s[i-1] == '('s[i-1]刚好和s[i]组成一对有效括号,长度为2。那么这种情况下我们可以推导出: d p [ i ] = d p [ i − 2 ] + 2 dp[i] = dp[i-2] + 2 dp[i]=dp[i2]+2
    • s[i-1] == ')':对于这种情况来说,我们不知道s[i-1]是否和前面的元素组成有效括号,但无论如何,dp[i-1]中存放的总是以s[i-1]结尾的字符串的最长有效括号长度。假设s[i-1]是有效的括号对之一,那么与他配对的括号index就是i-dp[i-1],于是乎我们就可以找到和s[i]配对的位置i-dp[i-1]-1,这样如果s[i-dp[i-1]-1] == '(',那么s[i]就能与他配对上。那么我们就可以推导出: d p [ i ] = d p [ i − 1 ] + 2 + d p [ i − d p [ i − 1 ] − 2 ] dp[i] = dp[i-1] + 2 + dp[i-dp[i-1]-2] dp[i]=dp[i1]+2+dp[idp[i1]2]

注意,上面要需要加上 d p [ i − d p [ i − 1 ] − 2 ] dp[i-dp[i-1]-2] dp[idp[i1]2],这是因为如果我们判定s[i-dp[i-1]-1] == '('s[i]配对的话,还需要考虑s[i-dp[i-1]-1]之前的情况。

代码

class Solution {
public:int longestValidParentheses(string s) {vector<int> dp(s.size(), 0);int ans = 0;for(int i = 1; i < s.size(); ++i){if(s[i] == ')'){// 前面一个是(的情况,直接配对成功if(s[i - 1] == '('){dp[i] = 2;// 加上前面配对的数量if(i - 2 >= 0) dp[i] += dp[i - 2];}// 前面一个也是),但是有配对的else if(dp[i - 1] > 0){// 判断匹配位置的符号是不是(,如果是则可以配对if((i - dp[i - 1] - 1) >= 0 && s[i - dp[i - 1] - 1] == '('){dp[i] = dp[i - 1] + 2;// 加上前面配对的数量if(i - dp[i - 1] - 2 >= 0) dp[i] += dp[i - dp[i - 1] - 2];}}}ans = max(ans, dp[i]);}return ans;}
};

300. 最长递增子序列

题目🔗

给你一个整数数组 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
示例 2
输入:nums = [0,1,0,3,2,3]
输出:4
示例 3
输入:nums = [7,7,7,7,7,7,7]
输出:1

思路

dp[i]表示第i个数为结尾的子序列的最长严格递增长度。

很容易的就能想到,我们要计算的dp[i]一共有两种情况:
- nums[i] > nums[i - 1]:此时dp[i] = dp[i-1] + 1
- nums[i] < nums[i - 1]:此时dp[i] = dp[i-1]

但是如果我们简单的将代码写成这样:

int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums.size(), 1);for(int i = 1; i < nums.size(); ++i){if(nums[i] > nums[i - 1])dp[i] = dp[i - 1] + 1;else dp[i] = dp[i-1];}return dp[nums.size()-1];}

当测试用例为:nums = [4,10,4,3,8,9]。我们打印出上面代码计算出的dp数组:1 2 2 2 3 4 。可以发现并不是我们所期望的那样,当i=4时,dp[4]应该为2,而不是3

我们计算成3是因为:对于子数组[4,10,4,3]来说,它的最大递增子序列为4, 10。我们如果只是简单的判断nums[4] > nums[3],就执行dp[i] = dp[i - 1] + 1,那么就相当于是把4, 10, 8当成了最大递增子序列,然而它并不是的,所以这里就出现了判断失误。

正确的做法是,我们要把dp[i]定义为第i个数为结尾的子数组的最长严格递增长度,并且该最长严格递增子序列最后一个数必定是nums[i]

每次进行判断的时候,我们要对该子数组各个位置nums[j]进行遍历,并比较与nums[i]的大小,如果nums[i] > nums[j],那么就有dp[i] = max(dp[i], dp[j] + 1)

最终答案就是dp数组中最大的那个数。

代码

class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums.size(), 1);int ans = 1;for(int i = 1; i < nums.size(); ++i){for(int j = 0; j < i; ++j){if(nums[i] > nums[j])dp[i] = max(dp[i], dp[j] + 1);}ans = max(ans, dp[i]);}return ans;}
};

674. 最长连续递增序列

题目🔗

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 lrl < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1
输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为3
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 57 在原数组里被 4 隔开。
示例 2
输入:nums = [2,2,2,2,2]
输出:1
解释:最长连续递增序列是 [2], 长度为1

思路1:双指针

定义两个指针:int slowint fast

代码1:双指针

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int slow = 0;int ans = 0;while(slow < nums.size()){int fast = slow + 1;while(fast < nums.size() && nums[fast] > nums[fast - 1]){fast++;}ans = max(ans, fast - slow);slow = fast;}return ans;}
};

思路2:dp

dp的思路和上题类似。我们定义一个dp数组,dp[i]表示第i个数为结尾的子数组的最长连续递增长度,并且该最长连续递增序列最后一个数必定是nums[i]

与上题不一样的就是我们不在需要遍历子数组了,直接判断nums[i]nums[i - 1]的大小即可。

代码2:dp

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {vector<int> dp(nums.size(), 1);int ans = 1;for(int i = 1; i < nums.size(); ++i){if(nums[i] > nums[i - 1]){dp[i] = max(dp[i], dp[i - 1] + 1);}ans = max(ans, dp[i]);}return ans;}
};

718. 最长重复子数组

题目🔗

给两个整数数组 nums1nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。

示例 1
输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1]
示例 2
输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
输出:5

思路1:dp

dp[i][j]表示数组nums1i个元素数组nums2j个元素的最长公共子数组的长度。其实也是和上题一样的。

代码1:dp

我们可以很快写出代码:

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size(), vector<int>(nums2.size(), 0));int ans = 0;// dp数组初始化for(int i = 0; i < nums1.size(); ++i){if(nums2[0] == nums1[i]) dp[i][0] = 1;if(dp[i][0] > ans) ans = dp[i][0];}for(int j = 0; j < nums2.size(); ++j){if(nums1[0] == nums2[j]) dp[0][j] = 1;if(dp[0][j] > ans) ans = dp[0][j];}// dp数组推导for(int i = 1; i < nums1.size(); ++i){for(int j = 1; j < nums2.size(); ++j){if(nums1[i] == nums2[j])dp[i][j] = dp[i - 1][j - 1] + 1;if(dp[i][j] > ans) ans = dp[i][j];}}return ans;}
};

注意初始化的时候我们也要去更新ans的大小,不然会漏结果。

思路2:dp优化

其实,我们可以将dp[i][j]定义为数组nums1i-1个元素数组nums2j-1个元素的最长公共子数组的长度,也就是在nums1前增加一行,nums2前增加一列:
在这里插入图片描述
这样我们在定义数组的时候就已经初始化好了,不必额外去for循环初始化:vector<vector<int>> dp (nums1.size() + 1, vector<int>(nums2.size() + 1, 0));

代码2:dp优化

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int ans = 0;// dp数组推导for(int i = 1; i <= nums1.size(); ++i){for(int j = 1; j <= nums2.size(); ++j){if(nums1[i - 1] == nums2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;if(dp[i][j] > ans) ans = dp[i][j];}}return ans;}
};

1143. 最长公共子序列

题目🔗

给定两个字符串 text1text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如,"ace""abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。
两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例 1
输入:text1 = "abcde", text2 = "ace"
输出:3
解释:最长公共子序列是 "ace" ,它的长度为 3
示例 2
输入:text1 = "abc", text2 = "abc"
输出:3
解释:最长公共子序列是 "abc" ,它的长度为 3
示例 3
输入:text1 = "abc", text2 = "def"
输出:0
解释:两个字符串没有公共子序列,返回 0

思路

这题和上题的不同之处在于 公共子序列原字符串相对有序的。感觉这题有点像300. 最长递增子序列718. 最长重复子数组的结合体。

上一题以i-1j-1是因为子数组必须要求是连续的,如果不连续,公共子数组直接归零,下一个子数组不能继承前一个子数组的公共子数组长度。

子序列则不一样,允许中间有间隔,下一个子序列可以继承前一个子序列的公共子序列长度

这样说很抽象,我们举个例子。比如说两个数组nums1 = [1,2,3,4,5], nums2 = [1,2,3,8,5] 。在index=3的时候出现分歧了,如果是公共子数组,index=3时,其公共子数组必须要归零,如果不归零,会影响index=4的判断。而如果是公共子序列,index=3可以保留index=2的最长子序列数,继而在index=4时继续递增。

代码

class Solution {
public:int longestCommonSubsequence(string text1, string text2) {int len1 = text1.size();int len2 = text2.size();vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1, 0));for(int i = 1; i <= len1; ++i){for(int j = 1; j <= len2; ++j){if(text1[i - 1] == text2[j - 1]){dp[i][j] = dp[i - 1][j - 1] + 1;}else{dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[len1][len2];}
};

1035. 不相交的线(最大连线数)

题目🔗

在两条独立的水平线上按给定的顺序写下 nums1nums2 中的整数。

现在,可以绘制一些连接两个数字 nums1[i]nums2[j] 的直线,这些直线需要同时满足:

  • nums1[i] == nums2[j]
  • 且绘制的直线不与任何其他连线(非水平线)相交。
    请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。

以这种方法绘制线条,并返回可以绘制的最大连线数。

示例 1
在这里插入图片描述
输入:nums1 = [1,4,2], nums2 = [1,2,4]
输出:2
解释:可以画出两条不交叉的线,如上图所示。 但无法画出第三条不相交的直线,因为从 nums1[1]=4nums2[2]=4 的直线将与从 nums1[2]=2nums2[1]=2 的直线相交。
示例 2
输入:nums1 = [2,5,1,2,5], nums2 = [10,5,2,1,5,2]
输出:3
示例 3
输入:nums1 = [1,3,7,1,7,5], nums2 = [1,9,2,5,1]
输出:2

思路

1143. 最长公共子序列一模一样。

代码

class Solution {
public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {int len1 = nums1.size();int len2 = nums2.size();vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1, 0));for(int i = 1; i <= len1; ++i){for(int j = 1; j <= len2; ++j){if(nums1[i - 1] == nums2[j - 1]){dp[i][j] = dp[i - 1][j - 1] + 1;}else{dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[len1][len2];}
};

53. 最大子序和

题目🔗

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。

示例 1
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6
示例 2
输入:nums = [1]
输出:1
示例 3
输入:nums = [5,4,-1,7,8]
输出:23

思路1:贪心

因为数组中包含负数,所以会拉低连续子数组的和,甚至变为负数,这个时候就说明从前面计算到这里的负数,再继续计算下去肯定只会越来越小,所以我们要放弃前面的元素,从下一个元素开始重新计算。每次计算的时候我们都要记录更大的连续和,最后得到的就是全局最优的最大连续和。

代码1:贪心

class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT32_MIN;int count = 0;for(int i = 0; i < nums.size(); i++) {count += nums[i];if(count > result) result = count;if(count <= 0) count = 0;}return result;}
};

思路2:dp

dp[i]表示以nums[i-1]为结尾的最大子数组的和为dp[i]

对于每个dp[i]都有两种情况:

  • nums[i-1]加入到前面的子数组中,也就是dp[i] = dp[i - 1] + nums[i - 1]
  • nums[i-1]不加入到前面的子数组中,从它这里重新开始计算和,也就是dp[i] = numd[i - 1]
  • 我们取最大的值:dp[i] = max(nums[i - 1], dp[i - 1] + nums[i - 1])

代码2:dp

class Solution {
public:int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size() + 1, 0);int ans = INT_MIN;for(int i = 1; i <= nums.size(); ++i){dp[i] = max(nums[i - 1], dp[i - 1] + nums[i - 1]);if(dp[i] > ans) ans = dp[i];}return ans;}
};

516. 最长回文子序列

题目🔗

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

示例 1
输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb"
示例 2
输入:s = "cbbd"
输出:2
解释:一个可能的最长回文子序列为 "bb"

思路

  • dp数组含义dp[i][j]表示从ij中的最长回文子序列的长度。
  • 推导公式:有两种情况
    • s[i] == s[j]:那么就可以把这一对元素加入到最长回文子序列中,dp[i][j] = dp[i+1][j-1] + 2
    • s[i] != s[j]:因为他们不能凑成一对,所以我们需要另外去考虑单独加上他们任意一个到中间的序列中是否会凑成回文,dp[i][j]=max(dp[i+1][j], dp[i][j-1])
  • dp初始化:当i==j时,就是一个元素,也是能组成回文的,所以dp[i][j]=1
  • 推导遍历顺序:从下图可以看出是从下到上,从左到右
    在这里插入图片描述

代码

class Solution {
public:int longestPalindromeSubseq(string s) {vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0));// 初始化for(int i = 0; i < s.size(); ++i){dp[i][i] = 1;}// 推导for(int i = s.size() - 1; i >= 0; --i){for(int j = i + 1; j < s.size(); ++j){if(s[i] == s[j]){dp[i][j] = dp[i + 1][j - 1] + 2;}else{dp[i][j] = max(dp[i+1][j], dp[i][j-1]);}}}return dp[0][s.size()-1];}
};

5. 最长回文子串

题目🔗

给你一个字符串 s,找到 s 中最长的 回文子串。

示例 1
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2
输入:s = "cbbd"
输出:"bb"

思路

这题和上题不同的地方在于,也就是序列连续串的区别。

  • dp数组含义dp[i][j]表示从ij中的子串如果是回文串,dp[i][j] = 1,如果不是,dp[i][j] = 0
  • 推导公式:有两种情况
    • s[i] == s[j] && dp[i+1][j-1] == 1:也就是说两端元素相等,且中间子串也为回文,那么dp[i][j] = 1
    • s[i] != s[j]:他们不能凑成回文,所以他们的dp[i][j] = 0,不用管。
  • dp初始化
    • i==j时,就是一个元素,也是能组成回文的,所以dp[i][j]=1
    • 如果前后两个元素相等,s[i] == s[i+1],那么也是回文,dp[i][i+1]=1
  • 推导遍历顺序:因为能组成的回文串长度只可能是从1到s.size(),而在前面初始化的时候我们已经判断了长度为1和2的回文子串,那么在遍历的时候我们从3开始即可。从左往右我们依次判断长度为l的子串头尾是否相等,且中间子串是否为回文(dp[i][j] == 1),这样去记录能组成回文串的长度以及左边界。因为我们是按照子串从短到长进行遍历的,所以最后记录的回文串长度一定是最长的。

代码

class Solution {
public:string longestPalindrome(string s) {vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0));if(s.size() == 1) return s;int left = 0;int max_len = 1;// 初始化for(int i = 0; i < s.size(); ++i){dp[i][i] = 1;if(i < s.size()-1 && s[i] == s[i+1]){dp[i][i+1] = 1;max_len = 2;left = i;}}// 推导for(int l = 3; l <= s.size(); ++l){ // 枚举子串长度for(int i = 0; i + l - 1 < s.size(); ++i){  // 枚举左边界int j = i + l - 1;  // 右边界if(s[i] == s[j] && dp[i+1][j-1]){dp[i][j] = 1;max_len = l;left = i;}}}return s.substr(left, max_len);}
};

http://www.ppmy.cn/news/1515227.html

相关文章

Git 的基本使用

1.创建 Git 本地仓库 仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制&#xff0c;就必须先创建⼀个仓库出来&#xff0c;例如下面代码创建了gitcode_linux的文件夹&#xff0c;之后再对其进行初始化。创建⼀个 Git 本地仓库对应的命令为 git init &#xff0c…

23 注意力机制—BERT

目录 BERT 预训练NLP 里的迁移学习BERTBERT动机BERT 预训练 NLP 里的迁移学习 在计算机视觉中比较流行,将 ImageNet 或者更大的数据集上预训练好的模型应用到其他任务中,比如小数据的预测、图片分类或者是目标检测 使用预训练好的模型(例如 word2vec 或语言模型)来抽取词、…

4. Java中的ArrayList和LinkedList有什么区别?各自的优缺点是什么?在什么场景下选择使用它们?

​​​​ArrayList 和 LinkedList 是 Java 中两个常用的 List 接口实现类&#xff0c;它们都可以用来存储有序的元素&#xff0c;但在底层实现和性能特征上有显著的区别。 1. 内部实现 ArrayList&#xff1a; ArrayList 底层基于动态数组实现。它维护一个可调整大小的数组&…

opencv处理图片(实战指南)

一、OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它拥有众多的图像处理和计算机视觉功能&#xff0c;包括各种常用的图像处理技术&#xff0c;如滤波、边缘检测、特征提取等。OpenCV支持多种编程语…

LLM 压缩之二: ShortGPT

0. 资源链接 论文: https://arxiv.org/pdf/2403.03853 项目代码: 待开源 1. 背景动机 现有的大语言模型 LLM 推理存在以下问题&#xff1a; LLM 模型因为 scale law 极大的提高模型的预测能力&#xff0c;但是同样带来较大的推理延时&#xff1b;对于 LLM 应用部署带来较大…

[数据集][目标检测]电力场景输电线杆塔塔架金属锈蚀腐蚀生锈检测数据集VOC+YOLO格式1344张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1344 标注数量(xml文件个数)&#xff1a;1344 标注数量(txt文件个数)&#xff1a;1344 标注…

【Docker】如何让子用户直接使用docker命令

本文首发于 ❄️慕雪的寒舍 通过用户组&#xff0c;让子用户可以直接使用docker命令。 说明 正常情况下&#xff0c;使用一个子用户来执行docker命令&#xff0c;会出现如下提示 $ docker ps permission denied while trying to connect to the Docker daemon socket at uni…

四十一、【人工智能】【机器学习】- Bayesian Logistic Regression算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

海康VisionMaster使用学习笔记11-VisionMaster基本操作

VisionMaster基本操作 VM示例方案 1. 工具拖拽及使用方式 分别从采集和定位栏里拖拽图像源,快速匹配,Blob分析工具 2. 模块连线 依次连线 3.如何订阅 点击快速匹配,可以看到输入源已订阅了图像1的图像,Blob分析类似 4. 方案操作及全局触发 点击快速匹配,创建特征模版,框选…

【2025校招】4399 NLP算法工程师笔试题

目录 1. 第一题2. 第二题3. 第三题 ⏰ 时间&#xff1a;2024/08/19 &#x1f504; 输入输出&#xff1a;ACM格式 ⏳ 时长&#xff1a;2h 本试卷分为单选&#xff0c;自我评价题&#xff0c;编程题 单选和自我评价这里不再介绍&#xff0c;4399的编程题一如既往地抽象&#xff…

Android - lock/unlock bootloader

在执行 adb remount 时高版本经常会提示失败 此时就需要对设备的进行解锁操作。记录两个部分&#xff0c;Google解锁和展锐解锁。 目录 一、Google解锁 二、展锐解锁 三、补充跳过按键检测的方案 一、Google解锁 官网介绍的unlock方法如下&#xff1a;锁定/解锁引导加载程序…

[数据集][目标检测]红外场景下车辆和行人检测数据集VOC+YOLO格式19069张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;19069 标注数量(xml文件个数)&#xff1a;19069 标注数量(txt文件个数)&#xff1a;19069 标…

dm 到 dm 的 HS 同步部署

一、数据库部署 完成两节点数据库部署并初始化&#xff0c;配置参数如下&#xff1a; 节点 192.168.2.132 192.168.2.133 数据库版本 DM8 DM8 实例名 DM1 DM2 端口号 5236 5236 数据文件路径 /home/dmdba/dmdata /home/dmdba/dmdata 二、 dmhs 部署 1. 部署…

代码随想录算法训练营第三十九天|198.打家劫舍、

题目链接&#xff1a;198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;因为隔一家才能取&#xff0c;所以当前最大的价值要么是dp[i-2] nums[i] 或者是 dp[i-1] class Solution(object):def rob(self, nums):""":type nums: List[int…

windows核心编程 内核对象,创建进程(CreateProcess),管道(CreatePipe)

windows核心编程 内核对象&#xff0c;创建进程&#xff08;CreateProcess&#xff09;&#xff0c;管道&#xff08;CreatePipe&#xff09; windows核心编程 内核对象&#xff0c;创建进程&#xff08;CreateProcess&#xff09;&#xff0c;管道&#xff08;CreatePipe&…

基于SpringBoot的滴答拍摄影项目

你好&#xff0c;我是计算机专业的学生&#xff0c;专注于摄影项目的开发与实现。如果您对我的项目感兴趣或有任何建议&#xff0c;欢迎随时联系我。 开发语言 Java 数据库 MySQL 技术 SpringBoot框架 工具 MyEclipse、Tomcat服务器 系统展示 首页 管理员功能模块 用…

计算机毕业设计选题推荐-民宿可视化分析-Python爬虫-随机森林算法

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Docker的私有仓库部署——Harbor

docker-harbor 私有仓库部署和管理&#xff1a; harboy&#xff1a;开源的企业级的docker仓库软件。 仓库&#xff1a;私有仓库 公有仓库。 harbor是有图形化的&#xff0c;页面ui展示的一个工具。操作起来很直观。 harbor每个组件都是由容器构建的&#xff0c;所以安装har…

[MRCTF2020]Hello_ misc

解压得一个png图片和一个flag.rar 图片拖入010editor 选择带zip头的这段蓝色全部复制&#xff0c;file-new-new Hex File&#xff0c;黏贴到新文件&#xff0c;另存为为1.zip 要密码,线索中断&#xff08;当然try to restore it.png&#xff0c;隐藏了zip压缩包&#xff0c;可…

GraphQL:API开发的未来,重塑数据交互的艺术

标题&#xff1a;GraphQL&#xff1a;API开发的未来&#xff0c;重塑数据交互的艺术 在当今快速发展的Web应用世界中&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为前后端分离架构的核心。然而&#xff0c;传统的RESTful API存在诸多限制&#xff0c;如过度获…