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

eclipse怎么做网站/随州今日头条新闻

eclipse怎么做网站,随州今日头条新闻,海兴县做网站价格,那些网站使用vue做的动态规划 一、一维数组:斐波那契数列 爬楼梯70简单 dp定义: dp[i]表示爬到第i阶有多少种不同的方式 状态转移方程: dp[i] dp[i-1] dp[i-1] (每次可以爬1或2个台阶) 边界条件: dp[0] 1; dp[1] 1;&#…

动态规划

一、一维数组:斐波那契数列

  1. 爬楼梯70简单

    dp定义: dp[i]表示爬到第i阶有多少种不同的方式

    状态转移方程: dp[i] = dp[i-1] + dp[i-1] (每次可以爬1或2个台阶)

    边界条件: dp[0] = 1; dp[1] = 1;(满足dp[2] = 2)

    返回值: dp[n],即通过累积,dp[n]为爬到第n阶台阶的方式

    改进: 因为dp只使用了前两个值,所以使用两个变量存储两个值,不断迭代更新。——试过之后与原dp数组相比改进不大,可能是因为题中n的值比较小,如果n的值较大的话,会节省空间开销。

  2. 打家劫舍198中等

    dp定义: dp[i]表示打劫到第i间房屋能偷窃到的最高金额

    状态转移方程: dp[i] = max(dp[i-1], dp[i-2] + 第i间房屋的金额)

    边界条件: dp[0] = 0; dp[1] = nums[0]; (后续 要计算dp[i-2])

    返回值: dp[n],即打劫到第n间房屋能偷窃到的最高金额

    改进: 同样可以缩小空间开销,在数组够长的时候可以进行节省。

  3. 打家劫舍Ⅱ213中等

    该题在上一题的基础上加了一个限制条件,房屋是环形,也就是在偷了第一间房的情况下不能偷最后一间;偷了最后一间的情况下不能偷第一间!! 所以分为两种情况,从第1间到第n-1间,从第2间到第n间。

    dp定义: dp[i]表示打劫到第i间房屋能偷窃到的最高金额

    状态转移方程: dp[i] = max(dp[i-1], dp[i-2] + 第i间房屋的金额)

    边界条件: 只有一间房屋,返回该房屋的金额;只有两间房屋,返回两间房屋中金额最大的;超过两间,根据特殊情况分别计算抢劫第1间房屋和最后一间房屋两种情况下能获取到的最高金额,将其返回。

    返回值: 盗窃金额最高的情况

    改进: 节省空间开销

总结:以上情况均使用了一维dp数组,且状态转移方程与数组的前几个数有关,可以使用变量存储,节省空间开销。关键对dp[i]的定义明确,状态转移方程确定好,在这种情况下再对边界情况进行特殊考虑。

二、二维数组:矩阵路径

  1. 矩阵的最小路径和64中等

    dp定义: dp[i][j]表示移动到[i][j]位置的时候路径上的数字和最小

    状态转移方程: dp[i][j] = min(dp[i-1][j] + [i][j]位置的数字, dp[i][j-1] + [i][j]位置的数字)

    边界条件: 第一行+[i][j-1], 第一列+[i-1][j]

    返回值: dp[m][n]

    题目:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。
    输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
    输出:7
    解释:因为路径 1→3→1→1→1 的总和最小。
    示例 2:输入:grid = [[1,2,3],[4,5,6]]
    输出:12
    class Solution {
    public:int minPathSum(vector<vector<int>>& grid) {int raw = grid.size();int col = grid[0].size();vector<vector<int>> dp(raw, vector<int>(col, 0));dp[0][0] = grid[0][0];for (int j = 1; j < col; j++) {dp[0][j] = dp[0][j-1] + grid[0][j];}for (int i = 1; i < raw; i++) {dp[i][0] = dp[i-1][0] + grid[i][0];}// 遍历for (int i = 1; i < raw; i++) {for (int j = 1; j < col; j++) {dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j];}}return dp[raw-1][col-1];}
    };
    

    改进: 空间优化,相当于对矩阵进行了压缩

    class Solution {
    public:int minPathSum(vector<vector<int>>& grid) {int raw = grid.size();int col = grid[0].size();vector<int> dp(col);// 初始化dp[0] = grid[0][0];for (int i = 1; i < col; i++) {dp[i] = dp[i-1] + grid[0][i];}for (int i = 1; i < raw; i++) {dp[0] = dp[0] + grid[i][0];for (int j = 1; j < col; j++) {dp[j] = min(dp[j-1] + grid[i][j], dp[j] + grid[i][j]);}}return dp[col-1];}
    };
    
  2. 不同路径62中等

    dp定义: dp[i][j]表示到[i][j]位置的路径总数

    状态转移方程: dp[i][j] = dp[i-1][j] + dp[i][j-1]

    边界条件: dp[0][j] = 1; dp[i][0] = 1

    返回值: dp[m-1][n-1]

    改进: 和上一题一样的思路

三、数组区间

  1. 数组区间和303简单

    dp定义: dp[i]表示从0-i的元素和

    状态转移方程: dp[i] = dp[i-1] + nums[i]

    边界条件: dp[0] = 0

    返回值: dp[right] - dp[left] + nums[left]

    改进: 这种情况下dp[right] - dp[left]之后包右不包左

  2. 数组中等差递增子区间的个数

    dp定义: dp[i]是i位置等差数列的个数,需要一个变量count记录到i位置之前等差数列的个数

    状态转移方程: 如果公差还为d,dp[i] = dp[i-1] + 1; 如果方差变化,d = nums[i] - nums[i-1]

    边界条件: d = nums[i] - nums[i-1], dp[0] = 0

    返回值: count

    改进: nums[i] - nums[i-1] = nums[i-1] - nums[i-2] 隐含了判断等差数列的长度大于等于3

    改进代码:

    class Solution {
    public:int numberOfArithmeticSlices(vector<int>& nums) {int n = nums.size();// 长度必须大于3,所以如果数列长度小于3,返回0if (n < 3) {return 0;}vector<int> dp(n);dp[0] = 0;dp[1] = 0;// 等差数列个数int count = 0;for (int i = 2; i < n; i++) {if (nums[i] - nums[i-1] == nums[i-1] - nums[i-2]) {dp[i] = dp[i-1] + 1;count += dp[i];}}return count;}
    };
    

四、分割整数

  1. 分割整数的最大乘积343

    dp定义: dp[i] 表示第i个数拆分后可以得到的最大乘积,会成为后面数的因数。

    状态转移方程: i表示当前要计算最大乘积的数,j表示i的某个因数

    for (int i = 2; i <= n; i++) {int curMax = 0;for (int j = 1; j < i; j++) {curMax = max(curMax, max(j* (i-j), j * dp[i-j]));}dp[i] = curMax;
    }
    

    边界条件: 拆分的正整数的个数大于2,所以dp[0] = 0; dp[1] = 1

    返回值: dp[n]

    改进:

  2. 按平方数来分割整数279中等

    dp定义: dp[i]表示i的完全平方数的最小数量

    状态转移方程:

    for (int i = 1; i <= n; i++) {int minValue = INT_MAX;for (int j = 1; j * j <= i; j++) {minValue = min(minValue, dp[i-j*j]);}dp[i] = minValue + 1;
    }
    

    边界条件: dp[0] = 0

    返回值: dp[n]

    改进:

  3. 分割整数构成字母字符串91中等

    dp定义: dp[i]表示0-i位置有的编码方式

    状态转移方程: 因为26个字母编码有两位数,而且前缀0是不能包含在两位数的,所以分为两种情况:

    第一种是只把加第i个数当成编码:

    if (s[i-1] != '0') {dp[i] += dp[i-1];}
    

    第二种加上前一个数看是否构成新的编码:

    if (s[i-2] != 0 && ((s[i-2] - '0') * 10 + (s[i-1] - '0')) < 26) {dp[i] += dp[i-2];
    }
    

    边界条件: dp[0] = 1;

    返回值: dp[n]

    改进:

五、最长递增子序列

  1. 最长递增子序列300中等

    dp定义: dp[i]表示从0-i可以构成递增子序列的最大长度

    状态转移方程: 因为可以删除数组中的某些元素,所以递增子序列要从之前的所有数检查。

    for (int i = 0; i < n; i++) {dp[i] = 1;for (int j = i - 1; j>= 0; j--) {if (nums[j] < nums[i]) {dp[i] = max(dp[i], dp[j] + 1);}}
    }
    

    边界条件: dp[i] = 1,每个元素都是一个递增子序列

    返回值: dp数组中的最大值。

    改进: 贪心+二分查找

    贪心:因为我们想要上升子序列尽可能长,所以就要序列上升得尽可能慢,每次在上升子序列最后加上的数尽可能小

    dp定义:dp[i]表示长度为i的最长上升子序列的末尾元素的最小值,用len记录目前最长上升子序列的长度,起始为1

    状态转移方程:

    if (nums[i] > d[len]) {d[++len] = nums[i];
    } else {// 二分查找int l = 1, r = len, pos = 0;while (l <= r) {int mid = (l + r) >> 1;if (d[mid] < nums[i]) {pos = mid;l = mid + 1;} else {r = mid - 1;}}d[pos + 1] = nusm[i];-0
    } 
    

    边界条件:dp[1] = nums[0];

    返回值:len

  2. 一组整数对能够构成的最长链646中等

    dp定义: dp[i]表示以pairs[i]为结尾的最长数对链的长度

    状态转移方程: 先将数对链的第一个元素进行排序,以第i位为定点,遍历之前一共可以组成多少个数对链

    sort(pairs.begin(), pairs.end());
    for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {if (pairs[i][0] > pairs[j][1]) {dp[i] = max(dp[i], dp[j] + 1);}}
    }
    

    边界条件:

    返回值: dp[n-1]

    改进: 按元组的第二个数的大小进行排序

  3. 最长摆动子序列376中等

    dp定义: 两个dp分别定义上升序列up和下降序列down

    状态转移方程:

    如果差是正,up序列更新,如果差是负,down序列更新,如果差为0都不更新。

    up[0] = down[0] = 1;
    for (int i = 1; i < n; i++) {if (nums[i] > nums[i-1]) {up[i] = max(up[i-1], down[i-1] + 1);down[i] = down[i-1];} else if (nums[i] < nums[i-1]) {down[i] = max(down[i-1], up[i-1] + 1);up[i] = up[i-1];} else {up[i] = up[i-1];down[i] = down[i-1];}
    }
    

    边界条件: up[0] = down[0] = 1;

    返回值: max(down[i-1], up[i-1]);

    改进: 减少空间消耗,使用up和down两个变量进行存储

    int up = 1, dowm = 1
    for (int i = 1; i < n; i++) {if (nums[i] - nums[i-1] > 0) {down += 1;} else if (nums[i] - nums[i-1] < 0){up += 1;}
    }
    return max(up, down);
    

六、最长公共子序列

  1. 最长公共子序列1143中等

    dp定义: dp[i][j]表示word1的第i位和word2的第j位之前序列的最长公共子序列

    状态转移方程:

    如果word1[i] == word2[j], dp[i][j] = dp[i-1][j-1] + 1

    如果word1[i] != word2[j], dp[i][j] = max(dp[i-1][j], dp[i][j-1])

    边界条件: dp[0][0] = 0

    返回值: dp[n][m]

    改进:

七、0-1背包

  1. 划分数组为和相等的两部分416中等

    dp定义: dp[i][j]表示到nums数组的第i个位置,和能否是j,true表示和可以是j,false表示不可以

    状态转移方程:

    如果j < 当前数nums[i],说明不能放入:dp[i][j] = dp[i-1][j]

    如果j > 当前数nums[i],有两种情况:dp[i][j] = dp[i-1][j] | dp[i-1][j-nums[i]]

    边界条件:

    和为0,哪个元素都不选:dp[i][0] = true

    dp[0][nums[0]] = true

    返回值: dp[n-1][target]

    改进: 空间优化

  2. 改变一组数的正负号使得它们的和为一给定数494中等 —— 回溯递归

    应该想法简单一点,不能把全过程都想清楚,把子问题想明白就行

    dp定义:

    状态转移方程:

    边界条件:

    返回值:

    改进:

  3. 01字符构成最多的字符串474中等——三维数组

    dp定义: dp[i][j][k]三维dp数组,第一维表示在前多少个字符串中找0和1,j表示0的个数,k表示1的个数。

    状态转移方程:

    for (int i = 1; i <= length; i++) {// 计算该字符串中0和1的个数for (int j = 0; j <= m; j++) {for (int k = 0; k <= n; k++) {dp[i][j][k] = dp[i-1][j][k];if (j >= zeros && k >= ones) {dp[i][j][k] = max(dp[i][j][k], dp[i-1][j-zeros][k-ones] + 1);}}}
    }
    

    边界条件: dp[0][j][k] = 0

    返回值: dp[length][m][n]

    改进:

  4. 找零钱的最少硬币数322中等

    dp定义: dp[i]表示金额和为i的最小硬币的数量

    状态转移方程:

    for (int i = 1; i <= amount; i++) {for (int j = 0; j < coins.size(); j++) {if (coins[j] <= i) {dp[i] = min(dp[i], dp[i-coins[j]] + 1);}}
    }
    if (dp[amount] > amount) {return -1;
    }
    return dp[amount];
    

    边界条件: dp[0] = 0;dp[other] = amount + 1(表示没有构成amount金额的方案);

    返回值: 如果硬币不能构成所需金额,则返回-1;如果硬币可以构成所需金额,返回所需的最小硬币数。

    改进:

  5. 找零钱的硬币数组合518中等

    dp定义: dp[i]表示和为i的总方案数

    状态转移方程:

    for (int i = 1; i <= amount; i++) {for (int j = 0; j < coins.size(); j++) {if (i >= coins[j]) {dp[i] += dp[i-coins[j]] + 1;}}
    }
    return dp[amount];
    

    边界条件: dp[0] = 0

    返回值: dp[amount]

    改进:

  6. 字符串按单词列表分割139中等

    dp定义: dp[i]表示截止i位置前的字符串是否可以有wordDict中的单词构成

    将wordDict进行去重是因为可以减小重复计算

    状态转移方程:

    vector<bool> dp(s.size() + 1);
    for (int i = 1; i <= size(); i++) {for (int j = 0; j < i; j++) {if (dp[j] && wordDictSet.find(s.substr(j, i - 1)) != wordDictSet.end()) {dp[i] = true;break;}}
    }
    

    边界条件: dp[0] = true

    返回值: dp[s.size()]

    改进:

  7. 组合总和377组合总和Ⅳ

    dp定义: dp[i] 表示和为i时的元素组合个数

    状态转移方程:

    for(int i = 1; i <= target; i++) {for (int j = 0; j < nums.size(); j++) {if (i >= nums[j] && dp[i - nums[j]] < INT_MAX - dp[i]) {dp[i] += dp[i - nums[j]];}}
    }
    

    边界条件: dp[0] = 1

    返回值: dp[target]

    改进:

八、股票交易

允许的交易次数

能否在同一天进行买卖

增加限制条件要增加维度

  1. 股票交易Ⅰ 121简单

    dp定义: 最简单的情况,只有一个限制是不能在同一天进行买卖,只进行一次交易,dp[i]表示第i天卖出能获得的最大利润

    状态转移方程:

    dp[i] = max(dp[i-1], prices[i] + minprices)

    边界条件:

    dp[0] = 0;

    返回值: dp[n]

    改进: 空间优化,两个变量buy和sell分别保存

    int buy = -prices[0];
    int sell = 0;
    for (int i = 1; i < n; i++) {buy = max(buy, -prices[i]);sell = max(sell, buy + prices[i]);
    }
    
  2. 股票交易Ⅱ 122中等

    没有限制交易次数

    可以在同一天进行买卖

    dp定义: dp[i][j]表示第i天的买入(j=0)可以获得的最大利润和第i天卖出(j=1)可以获得的最大利润

    状态转移方程:

    dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i]);

    dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i]);

    边界条件:

    dp[0][0] = -prices[0];

    dp[0][1] = 0;

    返回值: dp[n-1][1]

    改进: 空间优化

    int buy = -prices[0];
    int sell = 0;
    for (int i = 1; i < n; i++) {// int temp_buy = max(buy, sell - prices[i]);// int temp_sell = max(sell, buy + prices[i]);// buy = temp_buy;// sell = temp_sell;// 第二种// int temp_buy = buy;// int temp_sell = sell;// buy = max(temp_buy, temp_sell - prices[i]);// sell = max(temp_sell, temp_buy + prices[i]);// 第三种buy = max(buy, sell - prices[i]);sell = max(sell, buy + prices[i]);
    }
    return sell;
    
  3. 股票交易Ⅲ123困难

    两次交易

    允许同一天买卖

    dp定义: dp[i][j]表示第i天的利润,j=0表示第一次买入;j=1表示第一次卖出;j=2表示第二次买入;j=3表示第二次卖出

    状态转移方程:

    dp[i][0] = max(dp[i-1][0], -prices[i]);

    dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i]);

    dp[i][2] = max(dp[i-1][2], dp[i-1][1] - prices[i]);

    dp[i][3] = max(dp[i-1][3], dp[i-1][2] + prices[i]);

    边界条件:

    dp[0][0] = -prices[0];

    dp[0][2] = -prices[0];

    返回值: dp[n-1][3]

    改进: 空间优化

    for (int i = 1; i < n; i++) {// 第一种// int temp_buy1 = buy1;// int temp_sell1 = sell1;// int temp_buy2 = buy2;// int temp_sell2 = sell2;// buy1 = max(temp_buy1, -prices[i]);// sell1 = max(temp_sell1, temp_buy1 + prices[i]);// buy2 = max(temp_buy2, temp_sell1 - prices[i]);// sell2 = max(temp_sell2, temp_buy2 + prices[i]);// 第二种buy1 = max(buy1, -prices[i]);sell1 = max(sell1, buy1 + prices[i]);buy2 = max(buy2, sell1 - prices[i]);sell2 = max(sell2, buy2 + prices[i]);
    }
    
  4. 股票交易Ⅳ188困难

    K次交易

    允许同一天进行买卖

    dp定义: 定义dp数组,i表示第i天,k表示完成了k次交易,j有两个状态,1表示手中持有股票,0表示手中没有股票

    状态转移方程:

    // 状态转移
    for (int i = 1; i < n; i++) {for (int K = 1; K <= k; K++) {dp[i][K][0] = max(dp[i-1][K][0], dp[i-1][K-1][1] + prices[i]);dp[i][K][1] = max(dp[i-1][K][1], dp[i-1][K][0] - prices[i]);}
    }
    

    边界条件:

    // 初始化
    for (int i = 0; i <= k; i++) {dp[0][i][0] = 0;dp[0][i][1] = -prices[0];
    }
    for (int i = 1; i < n; i++) {dp[i][0][0] = 0;dp[i][0][1] = max(dp[i-1][0][1], dp[i-1][0][0] - prices[i]);
    }
    

    返回值: dp[n-1][k][0]

    改进:

  5. 需要冷却期的股票交易309中等

    没有限制交易次数

    允许同一天进行买卖,但是卖掉之后要有一天冷冻期,在冷冻期内不能买入股票

    dp定义: dp[i][j], j的范围是0, 1, 2,分别表示i位置买入,卖出、冷冻的最大利润

    状态转移方程:

    dp[i][0] = max(dp[i-1][0], dp[i-1][2] - prices[i])

    dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])

    dp[i][2] = max(dp[i-1][2], dp[i-1][1])

    边界条件: dp[0][0] = -prices[0]; dp[0][1] = 0; dp[0][2] = 0;

    返回值: max(dp[n][0], max(dp[n][1], dp[n][2]));

    改进: 空间优化,因为只用到了i-1时候的利润,所以可以减小一个维度,用三个变量来存储上一次买入、卖出、冷冻的最大利润

    int n = prices.size();
    // 初始化
    int get = -prices[0];
    int out = 0;
    int no = 0;
    for (int i = 1; i < n; i++) {// 第一种// int temp_get = get;// int temp_out = out;// int temp_no = no;// get = max(temp_get, temp_no - prices[0]);// out = max(temp_out, temp_get + prices[0]);// no = max(temp_no, temp_out);// 第二种,冷冻期只有上一天卖出之后的后一天为冷冻期int temp_out = out;get = max(get, no - prices[i]);out = get + prices[i];no = max(temp_out, no);
    }
    
  6. 需要交易费用的股票交易714中等

    dp定义: dp[i][j]表示到第i支股票时,j=0时表示买入的利润,j=1时表示卖出的利润

    状态转移方程:

    dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i] - fee)

    dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])

    边界条件: dp[0][0] = -prices[i] - fee

    返回值: dp[n][1]

    改进: 空间优化,因为只用到了前一天的买入、卖出的值,所以只需要两个变量进行存储

    int get = -prices[0] - fee;
    int out = 0;
    for (int i = 1; i < n; i++) {// 第一种// int temp_get = get;// int temp_out = out;// get = max(temp_get, temp_out - prices[i] - fee);// out = max(temp_out, temp_get + prices[i]);// 第二种get = max(get, out - prices[i] - fee);out = max(get + prices[i], out);
    }
    

九、字符串编辑

1. 删除两个字符串的字符使他们相等583

本质:二维DP

dp定义: dp[i][j]表示word1的i位置和word2的j位置最长公共子序列的长度,删除操作数为两个字符串的长度和减去两倍最长公共子序列的长度

状态转移方程:

if (word1[i-1] == word2[j-1]) {dp[i][j] = dp[i-1][j-1] + 1;
} else {dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}

边界条件: dp[0][j] = 0; dp[i][0] = 0;

返回值: (n + m) - 2 * dp[n][m]

改进:

2. 编辑距离72困难

dp定义: dp[i][j]表示word1的第i个位置与word2的第j个位置相同的话需要的最少操作数,行表示插入,列表示删除,对角线表示

状态转移方程:

for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (word1[i-1] = word2[j-1]) {dp[i][j] = dp[i-1][j-1];} else {dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + 1;}}
}

边界条件: dp[i][0] = i,表示删除;dp[0][j] = j,表示插入。

返回值: dp[n][m]

改进:

3. 复制粘贴字符650中等

dp定义: dp[i]表示能够打印i个’A’的最少操作次数

状态转移方程:

for (int i = 2; i <= n; i++) {dp[i] = INT_MAX;for (int j = 1; j * j <= i; j++) {if (i % j == 0) {dp[i] = min(dp[i], min(dp[i / j] + j, dp[j] + i / j));}}
}

边界条件: dp[1] = 0

返回值: dp[n]

改进:

主要是思想的一些记录~

相关文章:

LeetCode——动态规划

动态规划 一、一维数组&#xff1a;斐波那契数列 爬楼梯70简单 dp定义&#xff1a; dp[i]表示爬到第i阶有多少种不同的方式 状态转移方程&#xff1a; dp[i] dp[i-1] dp[i-1] &#xff08;每次可以爬1或2个台阶&#xff09; 边界条件&#xff1a; dp[0] 1; dp[1] 1;&#…...

opencv和gdal的读写图片波段顺序问题

最近处理遥感影像总是不时听到 图片的波段错了&#xff0c;一开始不明就里&#xff0c;都是图片怎么就判断错了。 1、图像RGB波段顺序判断 后面和大家交流&#xff0c;基本上知道了一个判断标准。 一般来说&#xff0c;进入人眼的自然画面在计算机视觉中一般是rgb波段顺序表示…...

PyQt 打包成exe文件

参考链接 Python程序打包成.exe(史上最全面讲解)-CSDN博客 手把手教你将pyqt程序打包成exe(1)_pyqt exe-CSDN博客 PyInstaller 将DLL文件打包进exe_怎么把dll文件加到exe里-CSDN博客 自己的问题 按照教程走的话&#xff0c;会出现找不到“mmdeploy_ort_net.dll”文件的报错…...

【Web2D/3D】SVG(第二篇)

1. 前言 SVG&#xff08;Scalable Vector Graphics&#xff0c;可缩放矢量图形&#xff09;是一种使用XML描述2D图形的语言&#xff0c;由于SVG是基于XML&#xff08;HTML也是基于XML的&#xff09;&#xff0c;因为SVG DOM中每个元素都是可以操作的&#xff0c;包含修改元素属…...

leetcode18. 四数之和

题目描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; …...

(十八)Flask之threaing.local()对象

0、引子&#xff1a; 如下是一段很基础的多线程代码&#xff1a; from threading import Threaddemo 0def task(arg):global demodemo argprint(demo)for i in range(10):t Thread(targettask, args(i, ))t. start()当程序运行时&#xff0c;可能会看到输出的顺序是混乱的…...

ffmpeg 硬件解码零拷贝unity 播放

ffmpeg硬件解码问题 ffmpeg 在硬件解码&#xff0c;一般来说&#xff0c;我们解码使用cuda方式&#xff0c;当然&#xff0c;最好的方式是不要确定一定是cuda&#xff0c;客户的显卡不一定有cuda&#xff0c;windows 下&#xff0c;和linux 下要做一些适配工作&#xff0c;最麻…...

高德地图_公共交通路径规划API,获取两地点之间的驾车里程和时间

import pandas as pd import requests import jsondef get_dis_tm(origin, destination,city,cityd):url https://restapi.amap.com/v3/direction/transit/integrated?key xxx #这里就是需要去高德开放平台去申请key,请在xxxx位置填写,web服务APIlink {}origin{}&desti…...

PyTorch深度学习实战(28)——对抗攻击(Adversarial Attack)

PyTorch深度学习实战&#xff08;28&#xff09;——对抗攻击 0. 前言1. 对抗攻击2. 对抗攻击模型分析3. 使用 PyTorch 实现对抗攻击小结系列链接 0. 前言 近年来&#xff0c;深度学习在图像分类、目标检测、图像分割等诸多领域取得了突破性进展&#xff0c;深度学习模型已经能…...

MariaDB单机多实例的配置方法

1、什么是数据库的单机多实例 数据库的单机多实例是指在一台物理服务器上运行多个数据库实例。这种部署方式允许多个数据库实例共享相同的物理资源&#xff0c;如CPU、内存和存储&#xff0c;从而提高硬件利用率并降低成本。每个数据库实例可以独立运行&#xff0c;处理不同的…...

加强->servlet->tomcat

0什么是servlet jsp也是servlet 细细体会 Servlet 是 JavaEE 的规范之一&#xff0c;通俗的来说就是 Java 接口&#xff0c;将来我们可以定义 Java 类来实现这个接口&#xff0c;并由 Web 服务器运行 Servlet &#xff0c;所以 TomCat 又被称作 Servlet 容器。 Servlet 提供了…...

Python初学者必须吃透的69个内置函数!

所谓内置函数&#xff0c;就是Python提供的, 可以直接拿来直接用的函数&#xff0c;比如大家熟悉的print&#xff0c;range、input等&#xff0c;也有不是很熟&#xff0c;但是很重要的&#xff0c;如enumerate、zip、join等&#xff0c;Python内置的这些函数非常精巧且强大的&…...

Day73力扣打卡

打卡记录 统计移除递增子数组的数目 II&#xff08;双指针&#xff09; 链接 class Solution:def incremovableSubarrayCount(self, a: List[int]) -> int:n len(a)i 0while i < n - 1 and a[i] < a[i 1]:i 1if i n - 1: # 每个非空子数组都可以移除return n …...

Android原生实现分段选择

六年前写的一个控件&#xff0c;一直没有时间总结&#xff0c;趁年底不怎么忙&#xff0c;整理一下之前写过的组件。供大家一起参考学习。废话不多说&#xff0c;先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…...

在 Unity 中获取 Object 对象的编辑器对象

有这个需求的原因是&#xff0c;在编辑器的 Inspector 逻辑中&#xff0c;写了许多生成逻辑。 现在不想挨个在 Inspector 上都点一遍按钮&#xff0c;所以就需要能获取到它们的编辑器对象。 发现可以借助官方的 UnityEditor.Editor.CreateEditor 方法达到目的&#xff0c;如下…...

idea自动注释

前言 保存一下自己的自动注释代码 idea自动注释 前言1 创建类时&#xff0c;自动生成注释2 在方法上使用快捷键生成注释3 使用方法4 效果图 1 创建类时&#xff0c;自动生成注释 如下&#xff1a; #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package …...

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者&#xff1a;贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月&#xff0c;阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品&#xff0c; 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高&#xff0c;稳定性保…...

如何在无公网IP环境使用Windows远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道&#xff0c;映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…...

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿&#xff0c;我在之前那个MATS上面改一下就可以了&#xff0c;MAST项目&#xff1a;基于YOLOv8的多端车流检…...

Cookie的详解使用(创建,获取,销毁)

文章目录 Cookie的详解使用&#xff08;创建&#xff0c;获取&#xff0c;销毁&#xff09;1、Cookie是什么2、cookie的常用方法3、cookie的构造和获取代码演示SetCookieServlet.javaGetCookieServlet.javaweb.xml运行结果如下 4、Cookie的销毁DestoryCookieServletweb.xml运行…...

shell脚本自动化部署Zabbix4.2(修改脚本替换版本)

#!/bin/bash # 配置无人值守的安装&#xff0c;定义安装过程中需要用到的一些信息 DBPasswordadmin123 CacheSize256M ZBX_SERVER_NAMEZabbix-Server http_port80 # 配置 Zabbix 防火墙 firewall-cmd --permanent --zonepublic --add-port10051/tcp firewall-cmd…...

java SSM课程平台系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM课程平台系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…...

k8s二进制最终部署(网络 负载均衡和master高可用)

k8s中的通信模式 1、pod内部之间容器与容器之间的通信&#xff0c;在同一个pod 中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信的 2、同一个node节点之内&#xff0c;不同pod之间的通信&#xff0c;每个pod都有一个全局的真实的IP地址&a…...

【51单片机系列】DS1302时钟模块

本文是关于DS1302时钟芯片的相关介绍。 文章目录 一、 DS1302时钟芯片介绍二、DS1302的使用2.1、DS1302的控制寄存器2.2、DS1302的日历/时钟寄存器2.3、片内RAM2.4、DS1302的读写时序 三、SPI总线介绍四、DS1302使用示例 一、 DS1302时钟芯片介绍 DS1302是DALLAS公司推出的涓流…...

深入理解C语言中冒泡排序(优化)

目录 引言&#xff1a; 冒泡排序概述&#xff1a; 优化前&#xff1a; 优化后(注意看注释)&#xff1a; 解析优化后&#xff1a; 原理&#xff08;先去了解qsort&#xff09;&#xff1a; 引言&#xff1a; 排序算法是计算机科学中的基础问题之一。在本篇博客中&#xff0c…...

低代码选型注意事项

凭借着革命性的生产力优势&#xff0c;低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品&#xff0c;开发者该如何选择&#xff1f; 在研究低代码平台的年数上&#xff0c;本人已有3年&#xff0c;也算是个低代码资深用户了&#xff0c;很多企业面临低代码选型上的…...

Caffeine--缓存组件

Caffeine 概念缓存手动加载自动加载手动异步加载自动异步加载 驱逐策略基于容量基于时间基于引用 移除显式移除 概念 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。与ConcurrentMap有点相似。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的…...

Centos7:Jenkins+gitlab+node项目启动(1)

Centos7&#xff1a;Jenkinsgitlabnode项目启动(1) Centos7&#xff1a;Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启动(2) Centos7&#xff1a;Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启…...

starrocks集群fe/be节点进程守护脚本

自建starrocks集群&#xff0c;有时候服务会挂掉&#xff0c;无法自动拉起服务&#xff0c;于是采用supervisor进行进程守护。可能是版本的原因&#xff0c;supervisor程序总是异常&#xff0c;无法对fe//be进行守护。于是写了个简易脚本。 #!/bin/bash AppNameFecom.starrock…...

奇富科技跻身国际AI学术顶级会议ICASSP 2024,AI智能感知能力迈入新纪元

近日&#xff0c;2024年IEEE声学、语音与信号处理国际会议ICASSP 2024&#xff08;2024 IEEE International Conference on Acoustics, Speech, and Signal Processing&#xff09;宣布录用奇富科技关于语音情感计算的最新研究成果论文“MS-SENet: Enhancing Speech Emotion Re…...