力扣练习题(2024/4/16)

1买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

思路1暴力解法:

暴力解法的思路是遍历所有可能的买入和卖出时机,并计算它们之间的利润,然后找出利润最大的情况。具体步骤如下:

  1. 遍历所有可能的买入和卖出时机:使用两重循环,外层循环遍历可能的买入时机,内层循环在外层循环中的每个买入时机后面遍历可能的卖出时机。

  2. 计算利润:对于每一对买入和卖出时机,计算卖出价格减去买入价格得到的利润。

  3. 找出最大利润:在遍历过程中不断更新最大利润,并记录对应的买入和卖出时机。

  4. 返回结果:最终返回最大利润及对应的买入和卖出时机。

代码:

class Solution {
public:
    // 计算股票的最大利润
    int maxProfit(vector<int>& prices) {
        int result = 0; // 初始化最大利润为0
        for (int i = 0; i < prices.size(); i++) { // 遍历所有可能的买入时机
            for (int j = i + 1; j < prices.size(); j++){ // 在每个买入时机后面遍历可能的卖出时机
                result = max(result, prices[j] - prices[i]); // 计算当前买入和卖出时机的利润并更新最大利润
            }
        }
        return result; // 返回最大利润
    }
};

思路2:

解题思路是基于动态规划的思想。首先,我们定义了一个二维动态规划数组 dp,其中 dp[i][0] 表示第 i 天不持有股票时的最大利润,dp[i][1] 表示第 i 天持有股票时的最大利润。然后,我们通过遍历股票价格列表,在每一天都更新 dp 数组的值,直到遍历完所有的天数。

在更新 dp 数组的过程中,我们根据状态转移方程进行更新。对于第 i 天,有两种情况:

  1. 如果第 i 天不持有股票,则其最大利润为前一天不持有股票的利润 dp[i-1][0],或者是前一天持有股票,然后在第 i 天卖出股票得到的利润 dp[i-1][1] + prices[i] 的较大值。
  2. 如果第 i 天持有股票,则其最大利润为前一天持有股票的利润 dp[i-1][1],或者是前一天不持有股票,然后在第 i 天买入股票得到的利润 -prices[i] 的较大值。

根据以上思路,我们在循环中更新 dp 数组的值,最终返回最后一天不持有股票时的最大利润,即 dp[len-1][0]

注意这里说的是“持有”,“持有”不代表就是当天“买入”!也有可能是昨天就买入了,今天保持持有的状态

dp数组如何初始化

由递推公式 dp[i][0] = max(dp[i - 1][0], -prices[i]); 和 dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);可以看出

其基础都是要从dp[0][0]和dp[0][1]推导出来。

那么dp[0][0]表示第0天持有股票,此时的持有股票就一定是买入股票了,因为不可能有前一天推出来,所以dp[0][0] -= prices[0];

dp[0][1]表示第0天不持有股票,不持有股票那么现金就是0,所以dp[0][1] = 0;

代码:

class Solution {
public:
    // 计算股票的最大利润
    int maxProfit(vector<int>& prices) {
        int len = prices.size(); // 获取股票价格列表的长度
        if (len == 0) {
            return 0; // 如果列表为空,返回0
        }
        vector<vector<int>> dp(len, vector<int>(2)); // 定义二维动态规划数组dp
        for (int i = 0; i < len; i++) {
            // 根据状态转移方程填充dp数组
            if (i == 0) {
                dp[i][0] = 0;
                dp[i][1] = -prices[i]; // 第一天持有股票的利润为 -prices[i]
            } else {
                // 不持有股票的利润为前一天不持有股票的利润与前一天持有股票今天卖出的利润的较大值
                dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);
                // 持有股票的利润为前一天持有股票的利润与今天买入股票的利润的较大值
                dp[i][1] = max(dp[i-1][1], -prices[i]); // -prices[i] 表示买入股票的利润
            }
        }
        return dp[len-1][0]; // 返回最后一天持有股票获得的利润
    }
};

2买卖股票的最佳时机 II

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

示例 1:

输入:prices = [7,1,5,3,6,4]
输出:7
解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
     随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。
     总利润为 4 + 3 = 7 。

示例 2:

输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
     总利润为 4 。

示例 3:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0 。

提示:

  • 1 <= prices.length <= 3 * 104
  • 0 <= prices[i] <= 104

思路:

  • dp[i][0] 表示第i天持有股票所得现金。
  • dp[i][1] 表示第i天不持有股票所得最多现金

重点

  1. 首先,定义一个二维动态规划数组 dp,其中 dp[i][0] 表示第 i 天不持有股票时的最大利润,dp[i][1] 表示第 i 天持有股票时的最大利润。

  2. 初始条件设定为第一天,即 dp[0][0] 表示第一天持有股票的利润为负的第一天股票价格,dp[0][1] 表示第一天不持有股票的利润为0。

  3. 然后,利用状态转移方程进行动态规划。遍历股票价格列表,对于每一天的状态,更新 dp 数组的值。

  4. 对于 dp[i][0],表示第 i 天不持有股票时的最大利润,可以选择在前一天不持有股票的情况下保持不动,或者在前一天持有股票的情况下在第 i 天卖出股票。因此,取两者之间的较大值作为 dp[i][0] 的值。

  5. 对于 dp[i][1],表示第 i 天持有股票时的最大利润,可以选择在前一天持有股票的情况下保持不动,或者在前一天不持有股票的情况下在第 i 天买入股票。同样,取两者之间的较大值作为 dp[i][1] 的值。

  6. 最终,返回 dp[len - 1][1],表示最后一天不持有股票获得的最大利润,即为问题的解。

  • dp[i - 1][0] 表示第 i - 1 天不持有股票时的最大利润,即前一天的利润。
  • dp[i - 1][1] - prices[i] 表示前一天持有股票时的最大利润减去第 i 天股票价格后的值,即前一天持有股票,然后在第 i 天卖出股票得到的利润。

因此,max(dp[i - 1][0], dp[i - 1][1] - prices[i]) 取了这两者之间的较大值,即在第 i 天不持有股票时,我们要么保持不动,要么前一天持有股票并在第 i 天卖出,取两者利润的最大值。

  • dp[i - 1][1] 表示第 i - 1 天持有股票时的最大利润,即前一天的利润。
  • dp[i - 1][0] + prices[i] 表示前一天不持有股票时的最大利润加上第 i 天股票价格后的值,即前一天不持有股票,然后在第 i 天买入股票得到的利润。

因此,max(dp[i - 1][1], dp[i - 1][0] + prices[i]) 取了这两者之间的较大值,即在第 i 天持有股票时,我们要么保持不动,要么前一天不持有股票并在第 i 天买入,取两者利润的最大值。

代码:

class Solution {
public:
    // 计算股票的最大利润
    int maxProfit(vector<int>& prices) {
        int len = prices.size(); // 获取股票价格列表的长度
        vector<vector<int>> dp(len, vector<int>(2, 0)); // 定义二维动态规划数组dp,初始化为0
        dp[0][0] -= prices[0]; // 第一天持有股票的利润为 -prices[0]
        dp[0][1] = 0; // 第一天不持有股票的利润为0
        for (int i = 1; i < len; i++) {
            // 不持有股票的利润为前一天不持有股票的利润与前一天持有股票今天买入的利润的较大值
            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]);
        }
        return dp[len - 1][1]; // 返回最后一天不持有股票获得的利润
    }
};

3买卖股票的最佳时机 III

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入:prices = [3,3,5,0,0,3,1,4]
输出:6
解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。
     随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3 。

示例 2:

输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。   
     注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。   
     因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入:prices = [7,6,4,3,1] 
输出:0 
解释:在这个情况下, 没有交易完成, 所以最大利润为 0。

示例 4:

输入:prices = [1]
输出:0

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 105

3买卖股票的最佳时机 III

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入:prices = [3,3,5,0,0,3,1,4]
输出:6
解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。
     随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3 。

示例 2:

输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。   
     注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。   
     因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入:prices = [7,6,4,3,1] 
输出:0 
解释:在这个情况下, 没有交易完成, 所以最大利润为 0。

示例 4:

输入:prices = [1]
输出:0

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 105

思路:

  1. 定义动态规划数组: 我们首先定义一个二维数组 dp,其中 dp[i][j] 表示在第 i 天结束时进行第 j 次交易后的剩余最大现金。这里 j 取值范围为 0 到 4,分别代表不进行交易、进行一次买入、进行一次卖出、进行两次买入、进行两次卖出。

  2. 初始化动态规划数组: 对于第一天,我们需要考虑可以进行的交易操作。因为题目要求最多可以完成两笔交易,所以第一天可以进行第一次买入和第二次买入。因此,我们将 dp[0][1] 和 dp[0][3] 设置为负的第一天股票价格,表示在第一天结束时进行第一次买入和第二次买入操作后的剩余最大现金。

  3. 状态转移方程: 接下来,我们需要根据状态转移方程更新动态规划数组。具体地:

    • 对于进行买入操作的情况,我们需要考虑前一天是否已经进行了相应的交易。根据状态转移方程,我们取前一天结束时未进行买入操作和前一天结束时已经进行了买入操作但保持不变或者在当天买入的较大值。

    • 对于进行卖出操作的情况,同样需要考虑前一天是否已经进行了相应的交易。根据状态转移方程,我们取前一天结束时未进行卖出操作和前一天结束时已经进行了卖出操作但保持不变或者在当天卖出的较大值。

  4. 返回结果: 最后,我们返回 dp[prices.size() - 1][4],表示第 len - 1 天结束时进行第二次卖出操作后的剩余最大现金,即为问题的解。

代码:

class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.size() == 0) return 0; // 如果股票价格列表为空,则返回0
vector<vector<int>> dp(prices.size(), vector<int>(5, 0)); // 定义二维动态规划数组dp,行数为股票价格列表的长度,列数为5,初始化为0
dp[0][1] = -prices[0]; // 第一天结束时进行第一次买入操作后的剩余最大现金为负的第一天股票价格
dp[0][3] = -prices[0]; // 第一天结束时进行第二次买入操作后的剩余最大现金为负的第一天股票价格
for (int i = 1; i < prices.size(); i++) {
// 计算第一次买入操作后的剩余最大现金
dp[i][0] = dp[i - 1][0];
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[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]);
}
return dp[prices.size() - 1][4]; // 返回第 len - 1 天结束时进行第二次卖出操作后的剩余最大现金
}
};

4买卖股票的最佳时机 IV

给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入:k = 2, prices = [2,4,1]
输出:2
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。

示例 2:

输入:k = 2, prices = [3,2,6,5,0,3]
输出:7
解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。
     随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。

提示:

  • 1 <= k <= 100
  • 1 <= prices.length <= 1000
  • 0 <= prices[i] <= 1000

思路:

  1. 边界情况处理

    • 首先检查股票价格数组是否为空,如果为空直接返回0。
  2. 初始化动态规划数组 dp

    • 创建一个二维数组 dp,大小为 prices.size() × (2 * k + 1),表示在不同天数和不同交易次数下的最大利润。
  3. 第一天情况的初始化

    • 针对每次交易的买入操作,将 dp[0][j](奇数索引)设为 -prices[0],表示第一次买入的情况。
  4. 动态规划状态转移

    • 从第二天开始遍历股票价格数组。
    • 对于每天和每种交易次数,根据状态转移方程更新 dp[i][j]
      • dp[i][j + 1]:表示第 j/2 + 1 次买入股票的最大利润,可以选择继续保持不持有或者在前一天持有的基础上卖出。
      • dp[i][j + 2]:表示第 j/2 + 1 次卖出股票的最大利润,可以选择继续持有或者在前一天未持有的基础上买入。
  5. 返回结果

    • 在所有交易完成后(即遍历完所有天数),返回 dp[prices.size() - 1][2 * k],表示在最后一天结束时,最多进行 k 次交易的最大利润。

代码:

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        // 边界情况处理:如果股票价格数组为空,直接返回0
        if (prices.size() == 0) return 0;
        
        // 初始化动态规划数组
        vector<vector<int>> dp(prices.size(), vector<int>(2 * k + 1, 0));
        
        // 初始化第一天的情况
        for (int j = 1; j < 2 * k; j += 2) {
            dp[0][j] = -prices[0]; // 第一次买入的情况
        }
        
        // 动态规划,根据状态转移方程更新dp数组
        for (int i = 1; i < prices.size(); ++i) {
            for (int j = 0; j < 2 * k - 1; j += 2) {
                // 第i天未持有股票的情况,考虑继续未持有或者在前一天持有的基础上卖出
                dp[i][j + 1] = max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i]);
                // 第i天持有股票的情况,考虑继续持有或者在前一天未持有的基础上买入
                dp[i][j + 2] = max(dp[i - 1][j + 2], dp[i - 1][j + 1] + prices[i]);
            }
        }
        
        // 返回最后一天结束时,最多进行k次交易的最大利润
        return dp[prices.size() - 1][2 * k];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/551010.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS加载的各类地图怎么去除服务署名水印

昨天介绍的&#xff1a; 一套图源搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图-CSDN博客文章浏览阅读373次&#xff0c;点赞7次&#xff0c;收藏11次。一体化集成在一起的各类型图源&#xff0c;比如包括影像、清新的出图底图、地形、地图阴影、道路…

苍穹外卖学习记录(一)

1.JWT令牌认证 JSON Web Token (JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任&#xff0c;因为它是数字签名的。 JWT是目前最常用的一种令牌规范&#xff0c;它最…

【学习笔记】Python大数据处理与分析——pandas数据分析

一、pandas中的对象 1、Series对象 由两个相互关联的数组(values, index)组成&#xff0c;前者&#xff08;又称主数组&#xff09;存储数据&#xff0c;后者存储values内每个元素对应关联的标签。 import numpy as np import pandas as pds1 pd.Series([1, 3, 5, 7])print(…

Linux LVM与磁盘配额

目录 一.LVM概述 LVM LVM机制的基本概念 PV&#xff08;Physical Volume&#xff0c;物理卷&#xff09; VG&#xff08;Volume Group&#xff0c;卷组&#xff09; LV&#xff08;Logical Volume&#xff0c;逻辑卷&#xff09; 二.LVM 的管理命令 三.创建并使用LVM …

AutoPSA中推荐用户使用仿CII计算

Q:请问未知错误。优易AUtoPSAInDon3.app1670行是什么原因呢&#xff1f;如下图&#xff1a; A: 这是老的仿GLIF算法&#xff0c;遇到特殊情况有这个提示&#xff0c;建议使用仿CAESARII算法。

车载摄像头视频防抖处理解决方案,全新的稳定视觉体验

面对复杂多变的道路环境和车辆运动状态&#xff0c;如何确保车载摄像头拍摄的视频稳定清晰&#xff0c;一直是行业面临的重要挑战。美摄科技&#xff0c;作为视频防抖技术的领军企业&#xff0c;以其领先的车载摄像头视频防抖处理解决方案&#xff0c;为企业提供了全新的稳定视…

C++ - 文件流fstream

C 文件流是指在C编程中使用的用于文件输入输出操作的机制。这种机制允许程序员以类似于流的方式读取和写入文件数据。在C中&#xff0c;文件流通常使用<fstream>头文件提供的类来实现。 常用的文件流类包括&#xff1a; 1. std::ofstream&#xff1a;用于向文件中写入数…

筑牢个人信息安全防线,海云安受邀参加武汉“名家论坛”国家安全教育日专题讲座

近日&#xff0c;武汉“名家论坛”国家安全教育日专题讲座活动《“刷脸”有风险&#xff0c;如何保护我们的个人信息安全&#xff1f;》在武汉图书馆报告厅举办&#xff0c;海云安副总工程师李博士受邀参加本次活动。 活动以线下讲座、线上直播的形式&#xff0c;结合“普法讲座…

rk3588 安卓调试

rknn装上了android系统&#xff0c;用type-c usb连接上电脑&#xff0c;设备管理器发现了rk3588&#xff0c;但是Android Studio没有发现设备 后来怀疑是驱动没有安装&#xff0c;我用的驱动下载地址&#xff1a; 瑞芯微Rockchip驱动安装助手(适用于RK3308 RK3399等) Mcuzone…

H2O-3机器学习平台源码编译的各种坑

H2O-3机器学习平台是一个非常适合非专业人士学习机器学习的平台&#xff0c;自带WebUI&#xff0c;效果还是蛮不错的&#xff0c;官方也提供了jar包&#xff0c;一条命令就能直接运行&#xff0c;非常方便&#xff0c;但最近有源码编译的需求&#xff0c;实际操作过程中&#x…

error: failed to push some refs to ‘https://gitee.com/zhao-zhimin12/gk.git‘

git push origin master发现以下报错: 解决办法: 一、强制推送 git push origin master -f &#xff08;加上 -f 就是强制&#xff09; 二、 先拉取最新代码&#xff0c;再推送 1.git pull origin master 2.git push origin master

OpenHarmony实战开发-如何使用ArkUIstack 组件实现多层级轮播图。

介绍 本示例介绍使用ArkUIstack 组件实现多层级轮播图。该场景多用于购物、资讯类应用。 效果图预览 使用说明 1.加载完成后显示轮播图可以左右滑动。 实现思路 1.通过stack和offsetx实现多层级堆叠。 Stack() {LazyForEach(this.swiperDataSource, (item: SwiperData, i…

基于51单片机的心形流水灯设计

基于51单片机的心形流水灯 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.采用51单片机做为主控制器&#xff1b; 2.32个彩色&#xff2c;&#xff25;&#xff24;接在单片机的32个双向&#xff29…

机器人码垛机的技术特点与应用

随着科技的飞速发展&#xff0c;机器人技术正逐渐渗透到各个行业领域&#xff0c;其中&#xff0c;机器人码垛机在物流行业的应用尤为引人瞩目。它不仅提高了物流效率&#xff0c;降低了成本&#xff0c;更在改变传统物流模式的同时&#xff0c;为行业发展带来了重大的变革。 一…

通过钉钉发送消息

1、通过钉钉群添加一个机器人 2、代码实现 /*** 发钉钉审核.** param*/private void sendDingDing(PoMaster poMaster){if(poMaster.getTotalPrice().doubleValue() > 500){String url "https://oapi.dingtalk.com/robot/send?access_tokene11bbb694ad4425bf687d2e…

冯喜运:4.17昨日黄金完美区间多空通杀,今日黄金原油分析

【黄金走势分析 】&#xff1a;黄金昨日整体过山车&#xff0c;早盘黄金冲高2392一线后回落&#xff0c;价格在2379-2389区间震荡&#xff0c;午后区间下移&#xff0c;价格在2362-2380继续震荡&#xff0c;晚间价格再次触及2363支撑反弹&#xff0c;连阳上升突破早间高点&…

数据结构速成--栈

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 一…

信号量理论

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 理论 信号量是对公共资源的一种预定机制&#xff0c;资源不一定非要持有才算自己的&#xff0c;预定了也算&#xff0c;在未来任意时刻&#xff0c;仍然可以使用。 像我们申请有一块共享内存&#xff0c;如果一个进程正在使…

HTML5 <video> 标签属性、API 方法、事件、自定义样式详解与实用示例

HTML5 <video> 标签为网页内嵌视频提供了强大且便捷的功能。以下是对 <video> 标签的主要属性、API 方法、事件、自定义样式及其使用示例的详细介绍&#xff1a; 一、属性 1. src 定义&#xff1a;指定视频文件的 URL。示例&#xff1a;<video src"my_v…

树莓派驱动开发--iic篇(JY901S陀螺仪的三轴角度简单读取)

前言&#xff1a;既然大家都到了这步&#xff0c;想必对驱动开发有着一定的理解啦吧&#xff01;&#xff01;那我在前面说一下流程&#xff1a; 修改编译设备树》》》编写编译驱动文件》》》编写编译app文件》》》ftp挂载将前面3复制到树莓派的对应位置》》》加载驱动模块》》…