当前位置: 首页 > news >正文

Dynaminc Programming相关

目录

3.1 最长回文子串(中等):标志位

3.2 最大子数组和(中等):动态规划

3.3 爬楼梯(简单):动态规划

3.4 买卖股票的最佳时机(简单):动态规划

3.5 买卖股票的最佳时机Ⅱ(中等):动态规划

3.6 生成括号(中等):递归

3.7 打家劫舍(中等):动态规划

3.8 跳跃游戏(中等):贪心算法

3.9 最长递增子序列(中等):动态规划

3.10 不同路径(中等):动态规划

3.11 零钱兑换(中等):动态规划

3.12 最小路径和(中等):动态规划

3.13 动态规划总结!!!


3.1 最长回文子串(中等):标志位

题目:给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

思想:假设回文子串的左右边界开始为0,长度为1(已经对s=0或者s=1进行了判断),创建一个二维boolean数组,长度为均s的长度,分别从s的左右边界遍历,当值相等时判断此时的左右边界内部:

  • 若内部只有一个元素,此时就是一个回文子串,然后将这部分字符串设置为true

  • 若内部也是一个回文字符串,则左右边界和内部共同为一个字符串

    • 设置为true后计算此时的回文子串长度是否大于开始设定的回文子串长度1,若大于就修改回文子串长度

    • 返回s的substring即可


总结:利用巧妙的标志位来处理回文子串的内部情况


代码:

class Solution {
public String longestPalindrome(String s) {if (s == null || s.length() < 2) {return s;}int strLen = s.length();int maxStart = 0;  //最长回文串的起点int maxEnd = 0;    //最长回文串的终点int maxLen = 1;  //最长回文串的长度
​boolean[][] dp = new boolean[strLen][strLen];
​for (int r = 1; r < strLen; r++) {for (int l = 0; l < r; l++) {if (s.charAt(l) == s.charAt(r) && (r - l <= 2 || dp[l + 1][r - 1])) {dp[l][r] = true;if (r - l + 1 > maxLen) {maxLen = r - l + 1;maxStart = l;maxEnd = r;}}}}return s.substring(maxStart, maxEnd + 1);}
}

3.2 最大子数组和(中等):动态规划

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

思想:f(i)表示第i位的最大连续子数组,将f(i)存入F,则我们只需要将F中最大的f(i)取出即可

  • f(i)的值和f(i-1)有关,若f(i-1) + 当前nums[i]值还小于f(i),则说明nums[i]就是当前最大的连续子数组f(i)

    • 即:f(i) = max{f(i - 1) + nums[i], nums[i]}


 

总结:用一个prev每次存储f(i)的值,然后和之前的最大子数组和相比较


代码:

class Solution {public int maxSubArray(int[] nums) {//设置一个prev,用来记录f(i-1)int prev = 0;//最大连续子数组,第一个f(i)就是数组的第一个值int maxArray = nums[0];
​//遍历数组for(int curr : nums){//求出当前的f(i),当前的f(i)就是下一次遍历的f(i - 1)prev = Math.max(prev + curr, curr);
​//求f(i) 和 f(i - 1)中较大的一个maxArray = Math.max(maxArray, prev);}
​return maxArray;}
}

3.3 爬楼梯(简单):动态规划

题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思想:对于爬楼梯问题而言,如果:

  • 第一节楼梯f(1),只有一种方法

  • 第二节楼梯f(2),只有两种方法

  • 更高阶楼梯f(n)

    • 只有从n-1上爬一阶(这是第一种方案),方案数一共为f(n-1)

    • 或者从n-2上爬两阶(这是第二种方案),方案数一共为f(n-2)

      • 总的方案数f(n) = 第一种方案数 f(n-1)+ 第二种方案数f(n-2)


总结:利用斐波那契数列解决该问题即可;数列的定义可以表示为:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2),其中 n 表示数列的索引。


代码

class Solution {public int climbStairs(int n) {if(n < 2){return n;}int[] res = new int[n];//爬一节楼梯只有一种方法res[0] = 1;//爬两阶楼梯有两种方法res[1] = 2;//之后的每阶楼梯总的方案数f(n) = 第一种方案数 f(n-1)+ 第二种方案数f(n-2)for(int i = 2; i < n; i++){res[i] = res[i - 1] + res[i - 2];}return res[n - 1];}
}

3.4 买卖股票的最佳时机(简单):动态规划

题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

思想:先遍历一次数组,找到最小值prices[min],这就是股票买入的最低值,我们只需得到从该最低值min索引之后,股票差价prices[i] - preices[min] 最大的那天i,然后输出最大利润即可


总结:先找到最低股票价格(可以先设置一个minprice,因为后面会有交换操作,因此一开始给minprice赋值为正无穷),然后遍历求出股票差价,返回最大的股票差价


代码

class Solution {public int maxProfit(int[] prices) {//设置股票最低价格和最大利润int minprice = Integer.MAX_VALUE;int maxprofit = 0;//遍历数组,求出最低价格和最大利润for(int i = 0; i < prices.length; i++){//求出最低价格if(prices[i] < minprice){minprice = prices[i];}//求出最大利润else if(prices[i] - minprice > maxprofit){maxprofit = prices[i] - minprice;}}return maxprofit;}
}

3.5 买卖股票的最佳时机Ⅱ(中等):动态规划

题目:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润

思想:

  • 由于不限制是否能够在每一天都买入/卖出股票,因此我们能够获得的最大利润就是每次卖出都能获得利润的和

    • 因此需要先比较卖出价值是否大于买入价值,大于就将其累加,遍历完 prices 数组得到的累加值就是最大利润


总结:先找到最低股票价格(可以先设置一个minprice,因为后面会有交换操作,因此一开始给minprice赋值为正无穷),然后遍历求出股票差价,返回最大的股票差价


代码

class Solution {public int maxProfit(int[] prices) {//特殊情况if(prices == null || prices.length <= 1){return 0;}
​//获得利润:就必须卖出比买入大//获得的最大利润:每一次卖出都比买入大int maxprofit = 0;for(int i = 1; i < prices.length; i++){if(prices[i] > prices[i - 1]){maxprofit += prices[i] - prices[i - 1];}}return maxprofit;}
}

3.6 生成括号(中等):递归

题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合

思想:

  • 生成所有可能的括号序列:使用递归实现:长度为n的序列,就是在长度为n-1的序列前加了一个(或者)

  • 保证括号序列有效:遍历这个序列,使用变量balance表示左括号减去右括号的数量:

    • 遍历过程中balance小于0,说明 ) 出现在 (之前,此时不是有效括号

    • 遍历结束时不为零,说明 () 的个数不相等,也不是有效括号


总结:先找到最低股票价格(可以先设置一个minprice,因为后面会有交换操作,因此一开始给minprice赋值为正无穷),然后遍历求出股票差价,返回最大的股票差价


代码

class Solution {public List<String> generateParenthesis(int n) {//存储括号组合的数组List<String> res = new ArrayList<>();
​//调用方法:该方法能够生成所有可能的括号组合,并将其保存到res中generateAll(res, new char[2 * n], 0);return res;}
​//生成所有可能的括号组合public void generateAll(List<String> res, char[] curr, int pos){if(pos == curr.length){if(isValid(curr)){res.add(new String(curr));}}else{curr[pos] = '(';generateAll(res,curr,pos + 1);curr[pos] = ')';generateAll(res,curr,pos + 1);}}
​//判断是否为有效括号组合:根据balance判断,若为'('则balance + 1;若为')'则balance - 1//上式只能判断 '(' 与 ')'个数是否相等,无法判断是否有效//先对'('进行balance++,记录'('的个数,倘若balance < 0,则说明 ')' 出现在 '('之前,此时不是有效括号public boolean isValid(char[] curr){//记录左右括号之差的变量int balance = 0;
​for(char c : curr){if(c == '('){balance++;}else{balance--;}if(balance < 0){return false;}}return balance == 0;}
​
}

3.7 打家劫舍(中等):动态规划

题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

思想:

  • 没有房屋:偷窃最高金额为0

  • 只有一间房屋:偷窃最高金额就是数组值(当前房屋值)

  • 只有两间房屋:偷窃最高金额是这两件房屋中金额较多的一个

  • 房屋数k > 2时,偷窃最高金额有两种选择:

    • 若偷窃第k家,则f(k) = num[k] + f(k - 2)(偷窃第 k间房屋,那么就不能偷窃第 k−1 间房屋,偷窃总金额为前 k−2 间房屋的最高总金额与第 k的金额之和)

    • 若不偷窃第k家,则f(k) = f(k - 1)(不偷窃第 k间房屋,偷窃总金额为前 k−1间房屋的最高总金额)


总结:先找到最低股票价格(可以先设置一个minprice,因为后面会有交换操作,因此一开始给minprice赋值为正无穷),然后遍历求出股票差价,返回最大的股票差价


代码

class Solution {public int rob(int[] nums) {int len = nums.length;
​//没有房屋返回0if(nums == null || len == 0){return 0;}//只有一间房屋返回当前值else if(len == 1){return nums[0];}//两间房比较大小返回较大的一个else if(len == 2){return Math.max(nums[0], nums[1]);}//超过三间房返回两者中较大的一个int[] maxRob = new int[len];maxRob[0] = nums[0];maxRob[1] = Math.max(nums[0],nums[1]);for(int i = 2; i < len; i++){maxRob[i] = Math.max(nums[i] + maxRob[i-2], maxRob[i-1]);}return maxRob[len - 1];}
}

3.8 跳跃游戏(中等):贪心算法

题目:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false

思想:对于任意一个索引位置y,可达它的条件是当前位置x加上最大可达位置之和大于等于y;最大可达位置是每次的当前位置x+当前元素nums[x];我们只记录一个最大可达位置,如果进行跳跃时到达了下一个下标,该下标的最大可达位置小于之前的最大可达位置,则不更新最大可达位置


总结:需要先找到该问题的核心:如何确定能够到达最后一个下标?因此引入了最大可达位置变量,遍历数组:若可达,则判断是否需要更新最大可达位置的值,若不可达最后一个索引位置,则返回false


代码

class Solution {public boolean canJump(int[] nums) {int len = nums.length;//设置最大可达位置int maxReachPosition = 0;
​//遍历数组;当数组的索引值小于等于最大可达位置,就说明当前位置可达;//到达当前索引位置,判断是否需要更新最大可达位置for(int i = 0; i < len; i++){if(maxReachPosition >= i){maxReachPosition = Math.max(maxReachPosition, i + nums[i]);//判断最大可达位置是否大于等于最后一个索引位置,只要成立就结束方法返回trueif(maxReachPosition >= len - 1){return true;}}}return false;}
}

3.9 最长递增子序列(中等):动态规划

题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

思想:设置dp[i]用来表示到第i个元素时的最长递增子序列,则dp[0,...i-1]就是在dp[i]之前已经计算出的最长递增子序列:则

  • dp[i] =max(dp[j] + 1 , dp[i]), j < i && nums[j] < nums[i];因为j 并不一定是 i - 1

    最终最长的递增子序列就是dp[i]的最大值


总结:需要先找到该问题的核心:如何确定能够到达最后一个下标?因此引入了最大可达位置变量,遍历数组:若可达,则判断是否需要更新最大可达位置的值,若不可达最后一个索引位置,则返回false


代码

class Solution {public int lengthOfLIS(int[] nums) {if(nums == null || nums.length == 0){return 0;}//设置数组存储每个dp[i]的最长递增子序列int[] dp = new int[nums.length];
​//只有一个元素,最长递增子序列就是1dp[0] = 1;int result = 1;//dp[i] = max(dp[j]+1 , dp[i]) , j < i && nums[j] < nums[i]for(int i = 1; i < nums.length; i++){dp[i] = 1;for(int j = 0; j < i; j++){if(nums[j] < nums[i]){dp[i] = Math.max(dp[j] + 1, dp[i]);}}result = Math.max(dp[i],result);}return result;}
}

3.10 不同路径(中等):动态规划

题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?

思想:f(i,j)表示为到达(i,j)的路径数量,为了到达(i,j),可能的路径方案有两种:

  • (i-1,j)位置向下走一步,到达(i,j),此时的方法数为f(i-1,j)

  • (i,j-1)位置向右走一步,到达(i,j),此时的方法数为f(i,j-1)

  • 故:f(i,j) = f(i-1,j) + f(i,j-1)

  • 边界条件:f(0,0)=f(0,j)=f(i,0)=1,只有一个点、只有一行、只有一列的情况路径数都只有一个


总结:需要先找到该问题的核心:如何确定能够到达最后一个下标?因此引入了最大可达位置变量,遍历数组:若可达,则判断是否需要更新最大可达位置的值,若不可达最后一个索引位置,则返回false


代码

class Solution {public int uniquePaths(int m, int n) {//f(i,j)表示到达(i,j)的路径数,i < m, j < nint[][] res = new int[m][n];
​//只有一行:路径数为1for(int i = 0; i < m; i++){res[i][0] = 1;}
​//只有一列:路径数为1for(int j = 0; j < n; j++){res[0][j] = 1;}
​//否则:f(i,j) = f(i-1,j) + f(i,j-1)for(int i = 1; i < m; i++){for(int j = 1; j < n; j++){res[i][j] = res[i - 1][j] + res[i][j-1];}}
​//返回res到达(m,n)的值return res[m-1][n-1];}
}

3.11 零钱兑换(中等):动态规划

题目:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的

思想:将凑成总金额i的最少硬币数量设为f(i),假设f(0)f(1)f(i-1)已知,f(i)=min(f(i-coints[j])) + 1j为组成f(i)的最后一枚金币的面值,j可能是数组coins的任意一个值


总结:将凑成总金额i的最少硬币数量设为f(i),假设f(0)f(1)f(i-1)已知,f(i)=min(f(i-coints[j])) + 1j为组成f(i)的最后一枚金币的面值


代码

class Solution {public int coinChange(int[] coins, int amount) {//创建一个amount + 1 的数组(因为还需要包含dp[0])int[] dp = new int[amount + 1];
​//补充1:为dp[i]赋初值方便min()比较// int top = amount + 1;int top = amount + 1;//补充2:为dp[i]赋初值方便min()比较Arrays.fill(dp,top);dp[0] = 0;
​//循环为dp[]赋值,一致赋到dp[amount]for(int i = 1; i <= amount; i++){//f(i) = min(f(i - conins[j]) + 1);i为总金额数for(int j = 0; j < coins.length; j++){//当conins[j] <= i时才相加(如果conins[j] > i,说明conins[j]是无法凑成金额i的,这样可以减少运算量)if(coins[j] <= i){//此时为了进行min()比较,可以为dp[i]都附上初始值,初始值可以选用大于amount的任意值;见补充1、2//注意初始值不可以选用Integer.MAX_VALUE;否则不满足条件时最终判断就是Math.min(MAX_VALUE+1,MAX_VALUE);dp[i] = Math.min(dp[i - coins[j]] + 1,dp[i]);}}}//如果最终的dp[i]还大于amount,说明没有能够组成总金额的硬币,返回-1return dp[amount] > amount ? -1 : dp[amount];}
}

3.12 最小路径和(中等):动态规划

题目:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。

思想:将凑成总金额i的最少硬币数量设为f(i),假设f(0)f(1)f(i-1)已知,f(i)=min(f(i-coints[j])) + 1j为组成f(i)的最后一枚金币的面值,j可能是数组coins的任意一个值


总结:元素对应的最小路径和与其相邻元素的最小路径和有关,因此可以采用动态规划,具体是:

  • 元素对应的最小路径和 = min(上方相邻元素对应的最小路径和,左方相邻元素对应的最小路径和) + 当前元素值

    • dp[i][j]表示从左上角出发到[i][j]的最小路径和:有:dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + grid[i][j]

  • 特殊情况:

    • 只有一个点:dp[0][0] = grid[0][0];第一个数的最小路径和为该数的值

    • 只有一行:i=0,dp[0][j] = dp[0][j-1] + grid[0][j]

    • 只有一列:j=0,dp[i][0] = dp[i-1][0] + grid[i][0]


代码

class Solution {public int minPathSum(int[][] grid) {//grid[][]为空、行数为0、列数为0返回0if(grid == null || grid.length == 0 || grid[0].length == 0){return 0;}
​//拿到行数int row = grid.length;//拿到列数int column = grid[0].length;
​//记dp[i][j]为到达(i,j)时的最小路径和int[][] dp = new int[row][column];
​//只有一个点的情况dp[0][0] = grid[0][0];
​//只有一行: i = 0for(int j = 1; j < column; j++){dp[0][j] = dp[0][j - 1] + grid[0][j];}
​//只有一列:j = 0for(int i = 1; i < row; i++){dp[i][0] = dp[i - 1][0] + grid[i][0];}
​//dp[i][j] = min{dp[i-1][j],dp[i][j-1]} + grid[i][j]for(int i = 1; i < row; i++){for(int j = 1; j < column; j++){dp[i][j] = Math.min(dp[i][j-1], dp[i-1][j]) + grid[i][j];}}
​return dp[row-1][column-1];}
}

3.13 动态规划总结!!!

  • 动态:往往这类问题 某一状态的解 是与 该状态的前一个状态有关系;即通过 当前状态的前一状态 能够推出 当前状态

  • 规划:在利用 当前状态的前一状态 推出 当前状态 的过程中,可能会出现种种边界情况,在规划时必须将这些边界情况先单独拎出讨论,然后在使用通用方法解决

相关文章:

Dynaminc Programming相关

目录 3.1 最长回文子串&#xff08;中等&#xff09;&#xff1a;标志位 3.2 最大子数组和&#xff08;中等&#xff09;&#xff1a;动态规划 3.3 爬楼梯&#xff08;简单&#xff09;&#xff1a;动态规划 3.4 买卖股票的最佳时机&#xff08;简单&#xff09;&#xff1…...

使用 Elasticsearch 轻松进行中文文本分类

本文记录下使用 Elasticsearch 进行文本分类&#xff0c;当我第一次偶然发现 Elasticsearch 时&#xff0c;就被它的易用性、速度和配置选项所吸引。每次使用 Elasticsearch&#xff0c;我都能找到一种更为简单的方法来解决我一贯通过传统的自然语言处理 (NLP) 工具和技术来解决…...

MNN学习笔记(八):使用MNN推理Mediapipe模型

1.项目说明 最近需要用到一些mediapipe中的模型功能&#xff0c;于是尝试对mediapipe中的一些模型进行转换&#xff0c;并使用MNN进行推理&#xff1b;主要模型包括&#xff1a;图像分类、人脸检测及人脸关键点mesh、手掌检测及手势关键点、人体检测及人体关键点、图像嵌入特征…...

主力吸筹指标及其分析和使用说明

文章目录 主力吸筹指标指标代码分析使用说明使用配图主力吸筹指标 VAR1:=REF(LOW,1); VAR2:=SMA(MAX(LOW-VAR1,0),3,1)/SMA(ABS(LOW-VAR1),3,1)*100; VAR3:=EMA(VAR2,3); VAR4:=LLV(LOW,34); VAR5:=HHV(VAR3,34); VAR7:=EMA(IF(LOW<=VAR4,(VAR3+VAR5*2)/2,0),3); /*底线:0,…...

Python高光谱遥感数据处理与高光谱遥感机器学习方法教程

详情点击链接&#xff1a;Python高光谱遥感数据处理与高光谱遥感机器学习方法教程 第一&#xff1a;高光谱基础 一&#xff1a;高光谱遥感基本 01)高光谱遥感 02)光的波长 03)光谱分辨率 04)高光谱遥感的历史和发展 二&#xff1a;高光谱传感器与数据获取 01)高光谱遥感…...

【洛谷】P1678 烦恼的高考志愿

原题链接&#xff1a;https://www.luogu.com.cn/problem/P1678 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 将每个学校的分数线用sort()升序排序&#xff0c;再二分查找每个学校的分数线&#xff0c;通过二分找到每个同学估分附近的分数线。 最后…...

开机自启CPU设置定频

sudo apt-get install expect sudo apt-get install cpufrequtils具体步骤如下&#xff1a; 安装 cpufrequtils 工具 ⚫ sudo apt-get install cpufrequtils ⚫ 需要联网下载修改配置文件 ⚫ sudo vi /etc/init.d/cpufrequtils ⚫ 将 GOVERNOR“ondemand” 改为&#xff1a; &g…...

嵌入式Linux开发实操(十二):PWM接口开发

# 前言 使用pwm实现LED点灯,可以说是嵌入式系统的一个基本案例。那么嵌入式linux系统下又如何实现pwm点led灯呢? # PWM在嵌入式linux下的操作指令 实际使用效果如下,可以通过shell指令将开发板对应的LED灯点亮。 点亮3个LED,则分别使用pwm1、pwm2和pwm3。 # PWM引脚的硬…...

消息中间件介绍

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如ActiveMQ、RabbitMQ&#xff0c;Kafka&#xff0c;还有阿里巴巴…...

[Unity] 基础的编程思想, 组件式开发

熟悉 C# 开发的朋友, 在刚进入 Unity 开发时, 不可避免的会有一些迷惑, 例如不清楚 Unity 自己的思想, 如何设计与架构一个应用程序之类的. 本篇文章简要的介绍一下 Unity 的基础编程思想. 独立 Unity 很少使用 C# 的标准库, 例如 C# 的网络, 事件驱动, 对象模型, 这些概念在 …...

SVN 项目管理笔记

SVN 项目管理笔记 主要是介绍 SVN 管理项目的常用操作&#xff0c;方便以后查阅&#xff01;&#xff01;&#xff01; 一、本地项目提交到SVN流程 在SVN仓库下创建和项目名同样的文件夹目录&#xff1b;选中本地项目文件&#xff0c;选择SVN->checkout,第一个是远程仓库项…...

Android获取手机已安装应用列表JAVA实现

最终效果: 设计 实现java代码: //获取包列表private List<String> getPkgList() {List<String> packages new ArrayList<String>();try {//使用命令行方式获取包列表Process p Runtime.getRuntime().exec("pm list packages");//取得命令行输出…...

【校招VIP】有一个比赛获奖项目和参与的开源小项目,秋招项目竞争力够不够?三个标准,自己都可以估算

有个24届的学生问我&#xff1a;现在没有实习&#xff0c;能不能参与大厂秋招&#xff1f;手里有两个项目&#xff0c;一个是比赛的获奖项目&#xff0c;一个是CSDN上博主做的开源小项目&#xff0c;这两个项目竞争力够不够&#xff1f; 其实项目这块&#xff0c;无非就是三个…...

量化开发学习入门-概念篇

1.网格交易法 网格交易法&#xff08;Grid Trading&#xff09;是一种基于价格波动和区间震荡的交易策略。它适用于市场处于横盘或震荡的情况下。 网格交易法的基本思想是在设定的价格区间内均匀地建立多个买入和卖出水平&#xff08;网格&#xff09;&#xff0c;并在价格上…...

【草稿】关于文本句子分割(中文+英文)以及向量处理

获取文本 主函数 Main # -*- encoding: utf-8 -*- # Author: SWHL # Contact: liekkaskono163.com from pathlib import Path from typing import Dict, List, Unionimport filetypefrom ..utils import logger from .image_loader import ImageLoader from .office_loader i…...

【瑞吉外卖】所遇问题及解决方法

太菜了实习之余瑞吉外卖补充一下基础知识&#xff08;&#xff0c;不然真啥也不会了。 请输入正确的手机号&#xff01; 是因为我测试了我的手机号&#xff0c;爆红&#xff0c;以为方法有错。但其实是前端代码检查手机号是否符合规范的语句有点&#xff08;&#xff09;啊啊…...

【Hugo入门】基础用法

检查Hugo是否安装 hugo version显示所有可用命令 hugo help显示指定命令的可用子命令&#xff0c;例如查询server的所有子命令 hugo server --help建立你的网站&#xff0c;cd进入你的项目根目录运行 hugo默认发布内容到自动创建的public文件夹。 覆盖hugo或hugo server的默…...

Java实现一个简单的图书管理系统(内有源码)

简介 哈喽哈喽大家好啊&#xff0c;之前作者也是讲了Java不少的知识点了&#xff0c;为了巩固之前的知识点再为了让我们深入Java面向对象这一基本特性&#xff0c;就让我们完成一个图书管理系统的小项目吧。 项目简介&#xff1a;通过管理员和普通用户的两种操作界面&#xff0…...

网络安全等级保护2.0

等保介绍 信息系统运维安全管理规定&#xff08;范文&#xff09;| 资料 等保测评是为了符合国家法律发挥的需求&#xff0c;而不是安全认证&#xff08;ISO&#xff09; 一般情况没有高危安全风险一般可以通过&#xff0c;但若发现高位安全风险则一票否决 二级两年一次 三…...

【sql】MongoDB 增删改查 高级用法

【sql】MongoDB 增删改查 高级用法 相关使用文档 MongoDB Query API — MongoDB Manual https://www.mongodb.com/docs/manual/reference/sql-comparison //增 //新增数据2种方式 db.msg.save({"name":"springboot&#x1f600;"}); db.msg.insert({&qu…...

怎么做才能有效更新和优化产品手册文档

更新和优化产品手册文档是确保用户获得准确和最新信息的重要步骤。如果不及时地更新和优化信息&#xff0c;很容易导致我们的产品有滞后性&#xff0c;不能满足客户最新的需求。所以looklook总结了一些相关内容&#xff0c;以下是一些建议来更新和优化产品手册文档&#xff1a;…...

#P0867. 小武老师的烤全羊

问题描述 小武老师特别喜欢吃烤全羊&#xff0c;小武老师吃烤全羊很特别&#xff0c;为什么特别呢&#xff1f;因为他有 1010 种配料&#xff08;芥末、孜然等&#xff09;&#xff0c;每种配料可以放 11 到 33 克&#xff0c;任意烤全羊的美味程度为所有配料质量之和。 现在&…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR提升网络稳定小tips来啦!

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

C 语言学习

数组的指针 在c中&#xff0c;几乎所以使用数组名的表达式中&#xff0c;数组名的值是一个指针常量&#xff0c;也就是数组 第 一个元素的地址。注意这个值是指针常量&#xff0c;不是变量。 int a[10]{ ….....}; int *q; q&a[0] ; <>…...

TCP网络连接异常情况的处理

在网络连接中&#xff0c;经常会出现一些意外情况&#xff0c;导致TCP连接不能正常工作&#xff0c;对于这些意外情况&#xff0c;TCP内部有自己的解决方法 一.进程崩溃 在网络通讯时可能会出现进程突然崩溃的情况&#xff0c;当进程崩溃后进程就没了&#xff0c;就会导致进程…...

单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.10语句

1 表达式语句 表达式语句由表达式加上分号“;”组成。其一般形式为&#xff1a; 表达式; 执行表达式语句就是计算表达式的值。例如 caa; 2 函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为&#xff1a; 函数名(实际参数表); 例如 printf(“Hello !”);…...

Windows 通过服务名称搜索软件启动路径启动软件

文章目录 Windows 通过服务名称搜索软件启动路径启动软件 Windows 通过服务名称搜索软件启动路径启动软件 注意&#xff1a;QQ管家和360安全&#xff0c;正常情况下使用 taskkill 无法停止&#xff0c;因为在安全设置中有个“自保护”&#xff0c;正常情况下会默认勾选上&#…...

如何更高效的写出更健全的代码,一篇文章教会你如何拥有一个良好的代码风格

前言&#xff1a;在平常的写代码的过程中&#xff0c;或多或少的遇到很多奇怪的 bug &#xff0c;尤其是一些大的程序&#xff0c;明明上一部分都是好好的&#xff0c;写下一块的时候突然多几百个 bug 的情况&#xff0c;然后这一块写完了后编译的时候直接傻眼了&#xff0c;看…...

Java如何调用接口API并返回数据(两种方法)

Java如何调用接口API并返回数据&#xff08;两种方法&#xff09; java处理请求接口后返回的json数据-直接处理json字符串 处理思路&#xff1a; 将返回的数据接收到一个String对象中&#xff08;有时候需要自己选择性的取舍接收&#xff09; 再将string转换为JSONObject对象 …...

极狐GitLab 价值流管理之「总时间图」使用指南

本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Haim Snir 译者&#xff1a;极狐(GitLab) 市场部内容团队 对于软件研发管理者来说&#xff0c;了解在整个研发过程中时间都耗费在了哪些地方&#xff0c;是进行交付价值优化的关键洞察。GitLab / 极狐GitLab 新的价值流分…...

临夏州住房和城乡建设局网站/网络营销课程论文

如今人工智能逐步深入我们的生活&#xff0c;人脸识别技术尤其突出&#xff0c;刷脸门禁、刷脸开户、刷脸应用已然不是什么新鲜事儿了。 这也充分证明人脸识别技术应用已步入成熟期&#xff0c;而如何让所有想要该技术的中小企业都能低成本无门槛的使用成为应用最关键的一道门槛…...

wordpress+刷新/2345软件为什么没人管

编译kernel之前勾选如下几项...

深圳b2b网站开发公司/优秀软文范例200字

爬虫一般是用来抓取数据的工具&#xff0c;在爬取数据时需要注意遵守网站的使用条款和隐私政策。如果一次性爬取大量网页可能会对网站造成负担&#xff0c;因此建议使用爬虫时遵循"规范爬取"的原则&#xff0c;如设置合理的爬取间隔时间。...

什么是网站风格/龙岗seo网络推广

一 Docker简介 2013年发布至今&#xff0c; Docker 一直广受瞩目&#xff0c;被认为可能会改变软件行业。 但是&#xff0c;许多人并不清楚 Docker 到底是什么&#xff0c;要解决什么问题&#xff0c;好处又在哪里&#xff1f;今天就来详细解释&#xff0c;帮助大家理解它&…...

wordpress问卷/域名网

显示图像是 Opencv最基本的操作之一&#xff0c; imshow()函数可以实现该操作。如果使用过其他GUI框架背景&#xff0c;就会很自然地调用 imshow来显示一幅图像。但这个观点并不完全正确&#xff0c;因为图像确实会显示出来&#xff0c;但随即会消失。例如下面代码&#xff1a;…...

javascript 菜鸟教程/百度荤seo公司

如何远程杀死僵进程?所谓“僵进程”是指处于睡眠中&#xff0c;而且没用的进程。在进行并行计算时经常会有僵进程产生。由于用 top 看不到“僵进程”&#xff0c;所以写了如下一个叫做“rkill”的 shell 文件&#xff1a; #!/bin/tcshecho " Input start number of node…...