贪心算法题

0简介

0.1什么是贪心算法 

贪心算法是用贪婪(鼠目寸光)的角度,找到解决问题的最优解

贪心策略:(从局部最优 --> 整体最优)

1把解决问题的过程分为若干步;

2解决每一个问题时,都选择当前“看上去”最优的解法;

3“希望”得到全局最优解

0.2贪心算法特点

1贪心策略的提出

a.没有任何模板和标准

b.可能每道题的贪心标准是不同的

2贪心策略的正确性

a有可能贪心策略是错误的(例二和例三)

b也就是正确的贪心策略是需要证明的!

0.3证明找零问题 

1柠檬水找零

oj链接:柠檬水找零


class Solution
{
public:
    bool lemonadeChange(vector<int> &bills)
    {
        int five = 0, ten = 0;
        for (auto &bill : bills)
        {
            if (bill == 5)
                five++;
            else if (bill == 10)
            {
                if (five == 0)
                    return false;
                else
                    ten++, five--;
            }
            else
            {
                if (ten == 0)
                {
                    if (five >= 3)
                        five -= 3;
                    else
                        return false;
                }
                else
                {
                    ten--;
                    if (five >= 1)
                        five -= 1;
                    else
                        return false;
                }
            }
        }
        return true;
    }
};
//简化版
class Solution
{
public:
    bool lemonadeChange(vector<int> &bills)
    {
        int five = 0, ten = 0;
        for (int i = 0; i < bills.size(); i++)
        {
            if (bills[i] == 5)
                five++;
            else if (bills[i] == 10)
            {
                five--;
                ten++;
            }
            else
            {
                if (ten)
                    ten--, five--;
                else
                    five -= 3;
            }
            if (five < 0)
                return false;
        }
        return true;
    }
};

 

2将数组和减半的最小操作次数 

oj链接:将数组和减半的最少操作次数

class Solution
{
public:
    int halveArray(vector<int> &nums)
    {
        priority_queue<double> qe;
        double sum = 0; // 不能用int!
        for (auto &num : nums)
        {
            qe.push(num);
            sum += num;
        }
        int cnt = 0;
        double aim = sum / 2;
        while (true)
        {
            double maxval = qe.top();
            qe.pop();
            sum -= maxval;
            cnt++;
            maxval /= 2;
            sum += maxval;
            if (sum <= aim)
                return cnt;
            qe.push(maxval);
        }
    }
};


class Solution
{
public:
    int halveArray(vector<int> &nums)
    {
        priority_queue<double> qe;
        double sum = 0.0;
        for (auto &num : nums)
        {
            qe.push(num);
            sum += num;
        }
        sum /= 2.0;
        int cnt = 0;
        while (sum > 0)
        {
            double t = qe.top() / 2.0;
            qe.pop();
            sum -= t;
            cnt++;
            qe.push(t);
        }
        return cnt;
    }
};

3最大数 

oj链接:最大数

class Solution
{
public:
    class cmp
    {
    public:
        bool operator()(const string &s1, const string &s2)
        {
            return s1 + s2 > s2 + s1;
        }
    };
    string largestNumber(vector<int> &nums)
    {
        vector<string> str;
        for (auto &e : nums)
            str.push_back(to_string(e));
        sort(str.begin(), str.end(), cmp());
        string ret;
        for (auto &e : str)
            ret += e;
        if (ret[0] == '0')
            return "0";
        return ret;
    }
};

4摆动序列 

oj链接:摆动序列

 

class Solution
{
public:
    int left = 0, ret = 0;
    int wiggleMaxLength(vector<int> &nums)
    {
        for (int i = 0; i < nums.size() - 1; i++)
        {
            int right = nums[i + 1] - nums[i];
            if (right == 0)
                continue; // 有连续相等的情况
            if (left * right <= 0)
                ret++; // left=0 -> 开始处于第一个位置也要加
            left = right;
        }
        return ret + 1; // 加上最后一个位置
    }
};

5最长递增子序列

oj链接:最长递增子序列

class Solution
{
public:
    int lengthOfLIS(vector<int> &nums)
    {
        vector<int> ret;
        ret.push_back(nums[0]);
        for (int i = 1; i < nums.size(); i++)
        {
            int x = nums[i];
            if (x > ret.back())
                ret.push_back(x);
            else
            {
                // 二分插入位置
                int left = 0, right = ret.size() - 1;
                while (left < right)
                {
                    int mid = left + (right - left) / 2;
                    if (ret[mid] < x)
                        left = mid + 1;
                    else
                        right = mid;
                }
                ret[left] = x;
            }
        }
        return ret.size();
    }
};

6递增的三元子序列

oj链接:递增的三元子序列

思路:与上题类似! 

class Solution
{
public:
    bool increasingTriplet(vector<int> &nums)
    {
        vector<int> ret;
        ret.push_back(nums[0]);
        for (int i = 1; i < nums.size(); i++)
        {
            int x = nums[i];
            if (x > ret.back())
                ret.push_back(x);
            else
            {
                int left = 0, right = ret.size() - 1;
                while (left < right)
                {
                    int mid = left + (right - left) / 2;
                    if (ret[mid] < x)
                        left = mid + 1;
                    else
                        right = mid;
                }
                ret[left] = x;
            }
        }
        return ret.size() >= 3;
    }
};

7最长连续递增序列

oj链接:最长连续递增序列

该方法是从暴力解法(两层for循环)优化来的,所以暴力解法对,这个贪心一定对!  

class Solution
{
public:
    int findLengthOfLCIS(vector<int> &nums)
    {
        int n = nums.size(), ret = 1;
        for (int i = 0; i < n; i++)
        {
            int j = i;
            while (j + 1 < n && nums[j] < nums[j + 1])
                j++;
            ret = max(j - i + 1, ret);
            i = j;
        }
        return ret;
    }
};

8买卖股票的最佳时机 

 oj链接:买卖股票的最佳时机

该方法是从暴力解法(两层for循环)优化来的,所以暴力解法对,这个贪心一定对!  

class Solution
{
public:
    int maxProfit(vector<int> &prices)
    {
        int n = prices.size(), ret = 0;
        int MinPrice = INT_MAX;
        for (int i = 0; i < n; i++)
        {
            int profit = prices[i] - MinPrice;
            MinPrice = min(MinPrice, prices[i]);
            ret = max(profit, ret);
        }
        return ret;
    }
};

此题也可以采用 动态规划58道算法题 中的买卖股票的最佳时机Ⅲ的思路来解决~

9买卖股票的最佳时机Ⅱ

 oj链接:买卖股票的最佳时机 II

//双指针
class Solution
{
public:
    int maxProfit(vector<int> &prices)
    {
        int n = prices.size(), ret = 0;
        for (int i = 0; i < n; i++)
        {
            int j = i;
            while (j + 1 < n && prices[j] < prices[j + 1])
                j++;
            ret += prices[j] - prices[i];
            i = j;
        }
        return ret;
    }
};

//一天一天拆分
class Solution
{
public:
    int maxProfit(vector<int> &prices)
    {
        int n = prices.size(), ret = 0;
        for (int i = 0, right = 0; i < n - 1; i++)
        {
            right = prices[i + 1] - prices[i];
            if (right > 0)
                ret += right;
        }
        return ret;
    }
};

10K次取反后最大化的数组和

oj链接:K 次取反后最大化的数组和

//解法1:原始分类讨论
class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        int m = 0, minElem = INT_MAX, n = nums.size();
        for (auto x : nums) {
            if (x < 0)
                m++;
            minElem = min(minElem, abs(x)); // 求绝对值最⼩的那个数
        }
        // 分类讨论
        int ret = 0;
        if (m > k) {
            sort(nums.begin(), nums.end());
            for (int i = 0; i < k; i++) // 前 k ⼩个负数,变成正数
            {
                ret += -nums[i];
            }
            for (int i = k; i < n; i++) // 后⾯的数不变
            {
                ret += nums[i];
            }
        } else {
            // 把所有的负数变成正数
            for (auto x : nums)
                ret += abs(x);
            if ((k - m) % 2) // 判断是否处理最⼩的正数
            {
                ret -= minElem * 2;
            }
        }
        return ret;
    }
};
//解法2:利用小堆
class Solution
{
public:
    int largestSumAfterKNegations(vector<int> &nums, int k)
    {
        priority_queue<int, vector<int>, greater<int>> qe;
        for (auto &num : nums)
            qe.push(num);
        while (k)
        {
            int tmp = qe.top();
            qe.pop();
            tmp = -tmp;
            qe.push(tmp);
            k--;
        }
        int ret = 0;
        while (!qe.empty())
        {
            ret += qe.top();
            qe.pop();
        }
        return ret;
    }
};

11按身高排序 

oj链接:按身高排序

// 解法1
class Solution
{
public:
    vector<string> sortPeople(vector<string> &names, vector<int> &heights)
    {
        int n = names.size();
        pair<int, string> pr[n];
        for (int i = 0; i < n; i++)
        {
            pr[i].first = heights[i];
            pr[i].second = names[i];
        }
        sort(pr, pr + n, greater());
        vector<string> ret(n);
        for (int i = 0; i < n; i++)
            ret[i] = pr[i].second;
        return ret;
    }
};

// 解法2
class Solution
{
public:
    vector<string> sortPeople(vector<string> &names, vector<int> &heights)
    {
        int n = names.size();
        map<int, string> hash;
        for (int i = 0; i < n; i++)
            hash[heights[i]] = names[i];
        vector<string> ret;
        for (auto &[a, b] : hash)
            ret.push_back(b);
        reverse(ret.begin(), ret.end());
        return ret;
    }
};

// 解法3
class Solution
{
public:
    vector<string> sortPeople(vector<string> &names, vector<int> &heights)
    {
        int n = names.size();
        vector<int> index(n);
        for (int i = 0; i < n; i++)
            index[i] = i;
        sort(index.begin(), index.end(), [&](int i, int j)
             { return heights[i] > heights[j]; });
        vector<string> ret(n);
        for (int i = 0; i < n; i++)
            ret[i] = names[index[i]];
        return ret;
    }
};

12优势洗牌

oj链接:优势洗牌

class Solution
{
public:
    vector<int> advantageCount(vector<int> &nums1, vector<int> &nums2)
    {
        int n = nums2.size();
        vector<int> index2(n);
        for (int i = 0; i < n; i++)
            index2[i] = i;
        sort(index2.begin(), index2.end(), [&](int i, int j)
             { return nums2[i] < nums2[j]; });
        sort(nums1.begin(), nums1.end());
        vector<int> ret(n);
        // 田忌赛马
        int left = 0, right = n - 1;
        for (int i = 0; i < n; i++)
        {
            if (nums1[i] > nums2[index2[left]])
                ret[index2[left++]] = nums1[i]; // 比你大
            else
                ret[index2[right--]] = nums1[i]; // 比你小/相等 取对付你最大的数: nums2[index[right]]
        }
        return ret;
    }
};

13最长回文串

oj链接:最长回文串

class Solution
{
public:
    int longestPalindrome(string s)
    {
        unordered_map<char, int> hash;
        for (auto &a : s)
            hash[a]++;
        int ret = 0, tmp = 0;
        for (auto &[a, b] : hash)
        {
            // if(b%2==0) ret+=b;
            // else ret+=b-1;
            ret += b / 2 * 2;
        }
        if (ret < s.size())
            ret++;
        return ret;
    }
};

14增减字符串匹配 

oj链接:增减字符串匹配

class Solution
{
public:
    vector<int> diStringMatch(string s)
    {
        vector<int> ret;
        int l = 0, r = s.size();
        for (auto &ch : s)
        {
            if (ch == 'I')
                ret.push_back(l++);
            else
                ret.push_back(r--);
        }
        ret.push_back(l /*r*/);
        return ret;
    }
};

15分发饼干 

 oj链接:分发饼干

class Solution
{
public:
    int findContentChildren(vector<int> &g, vector<int> &s)
    {
        if (s.size() == 0)
            return 0;
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int i = 0, j = 0;
        while (i < g.size() && j < s.size())
        {
            if (g[i] <= s[j])
            {
                i++;
                j++;
            }
            else
                j++;
        }
        return i;
    }
};

16最优除法

oj链接:最优除法

class Solution
{
public:
    string optimalDivision(vector<int> &nums)
    {
        if (nums.size() == 1)
        {
            return to_string(nums[0]);
        }
        else if (nums.size() == 2)
        {
            return to_string(nums[0]) + "/" + to_string(nums[1]);
        }
        string ret = to_string(nums[0]) + "/(" + to_string(nums[1]);
        for (int i = 2; i < nums.size(); i++)
        {
            ret += "/" + to_string(nums[i]);
        }
        ret += ")";
        return ret;
    }
};

17跳跃游戏Ⅱ

oj链接:跳跃游戏 II

// 解法1
class Solution
{
public:
    int jump(vector<int> &nums)
    {
        int n = nums.size();
        vector<int> dp(n, INT_MAX);
        dp[0] = 0;
        for (int i = 1; i < n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                if (nums[j] >= i - j)
                    dp[i] = min(dp[i], dp[j] + 1);
            }
        }
        return dp[n - 1];
    }
};

// 解法2
class Solution
{
public:
    int jump(vector<int> &nums)
    {
        int n = nums.size();
        int left = 0, right = 0, ret = 0, maxpos = 0;
        while (left < n && right < n)
        {
            if (maxpos >= n - 1)
                return ret;
            ret++;
            for (int i = left; i <= right; i++)
                maxpos = max(maxpos, nums[i] + i);
            left = right + 1;
            right = maxpos;
        }
        return ret;
    }
};

18跳跃游戏 

oj链接:跳跃游戏

与上面的思路一致,只不过在while循环更换判断条件即可! 

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n=nums.size(),left=0,right=0,maxpos=0;
        while(left<=right)//如果到不了n-1:left>right
        {
            if(maxpos>=n-1) return true;
            for(int i=left;i<=right;i++) maxpos=max(maxpos,nums[i]+i);
            left=right+1;
            right=maxpos;
        }
        return false;
    }
};

19加油站 

 oj链接:加油站

class Solution
{
public:
    int canCompleteCircuit(vector<int> &gas, vector<int> &cost)
    {
        int n = gas.size();
        for (int i = 0; i < n; i++)
        {
            int pos = 0, cnt = 0;
            for (; pos < n; pos++)
            {
                int index = (pos + i) % n;
                cnt += gas[index] - cost[index];
                if (cnt < 0)
                    break;
            }
            if (cnt >= 0)
                return i;
            i = i + pos;
        }
        return -1;
    }
};

20单调递增的数字 

 oj链接:单调递增的数字

class Solution
{
public:
    int monotoneIncreasingDigits(int n)
    {
        string s = to_string(n);
        int i = 0, m = s.size();
        // 找递减位置
        while (i + 1 < m && s[i] <= s[i + 1])
            i++;
        if (i == m - 1)
            return n;
        cout << i << endl;
        // 回退找相等数的第一个
        while (i - 1 >= 0 && s[i - 1] == s[i])
            i--;
        s[i] -= 1;
        for (int j = i + 1; j < m; j++)
            s[j] = '9';
        return stoi(s);
    }
};

21坏了的计算器 

oj链接:坏了的计算器

class Solution
{
public:
    int brokenCalc(int startValue, int target)
    {
        // 第一种情况
        //  if(target<=startValue) return startValue-target;
        // 第二种情况
        int cnt = 0;
        while (target > startValue)
        {
            if (target % 2 != 0)
                target += 1;
            else
                target /= 2;
            cnt++;
        }
        return cnt + startValue - target;
    }
};

22合并区间

oj链接:合并区间

class Solution
{
public:
    vector<vector<int>> merge(vector<vector<int>> &intervals)
    {
        if (intervals.size() == 1)
            return intervals;
        sort(intervals.begin(), intervals.end()); // 左端点排序
        vector<vector<int>> ret;
        int n = intervals.size(), left = intervals[0][0], right = intervals[0][1];
        for (int i = 1; i < n; i++)
        {
            int next_left = intervals[i][0], next_right = intervals[i][1];
            if (right >= next_left)
                right = max(right, next_right);
            else
            {
                ret.push_back({left, right});
                left = next_left;
                right = next_right;
            }
            if (i == n - 1)
                ret.push_back({left, right}); // 最后一组区间放到ret中
        }
        return ret;
    }
};

23无重叠区间 

oj链接:无重叠区间

class Solution
{
public:
    int eraseOverlapIntervals(vector<vector<int>> &intervals)
    {
        if (intervals.size() == 1)
            return 0;
        sort(intervals.begin(), intervals.end());
        int n = intervals.size(), ret = 0, left = intervals[0][0], right = intervals[0][1];
        for (int i = 1; i < n; i++)
        {
            int next_left = intervals[i][0], next_right = intervals[i][1];
            if (right > next_left)
            {
                ret++;
                right = min(right, next_right); // 删除最大的right区间
            }
            else
            {
                left = next_left;
                right = next_right;
            }
        }
        return ret;
    }
};

24用最少量的箭引爆气球

oj链接:用最少数量的箭引爆气球

class Solution
{
public:
    int findMinArrowShots(vector<vector<int>> &points)
    {
        if (points.size() == 1)
            return 1;
        sort(points.begin(), points.end());
        int left = points[0][0], right = points[0][1];
        int n = points.size(), ret = 1;
        for (int i = 1; i < n; i++)
        {
            int next_left = points[i][0], next_right = points[i][1];
            if (right >= next_left)
            {
                // 相交的区间去与下一个比
                // left=max(left,next_left);
                right = min(right, next_right);
            }
            else
            {
                // left=next_left;
                right = next_right;
                ret++;
            }
        }
        return ret;
    }
};

25整数替换

oj链接:整数替换

//解法1
class Solution
{
public:
    unordered_map<int, int> memo; // 不用vector:存不下
    int integerReplacement(int n)
    {
        return MinCount(n);
    }
    int MinCount(long long n) // n越界处理
    {
        // 记忆化
        if (memo.count(n))
            return memo[n];
        if (n == 1)
        {
            memo[n] = 0;
            return memo[n];
        }
        int ret = 0;
        if (n % 2 != 0)
            ret = min(MinCount(n + 1), MinCount(n - 1)) + 1;
        else
            ret = MinCount(n / 2) + 1;
        // 记忆化
        memo[n] = ret;
        return memo[n];
    }
};

//解法2
class Solution
{
public:
    int integerReplacement(long long n)
    {
        int ret = 0;
        while (n != 1)
        {
            if (n % 2 == 0)
                n /= 2;
            else
            {
                if (n % 4 == 1 || n == 3)
                    n -= 1;
                else
                    n += 1;
            }
            ret++;
        }
        return ret;
    }
};

26俄罗斯套娃信封问题

oj链接:俄罗斯套娃信封问题

class Solution
{
public:
    int maxEnvelopes(vector<vector<int>> &envelopes)
    {
        int ret = 0, n = envelopes.size();
        sort(envelopes.begin(), envelopes.end());
        vector<int> dp(n, 1);
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                if (envelopes[j][1] < envelopes[i][1] && envelopes[j][0] < envelopes[i][0])
                    dp[i] = max(dp[i], dp[j] + 1);
            }
            ret = max(ret, dp[i]);
        }
        return ret;
    }
};

class Solution
{
public:
    int maxEnvelopes(vector<vector<int>> &envelopes)
    {
        sort(envelopes.begin(), envelopes.end(), [](vector<int> &v1, vector<int> &v2)
             { return v1[0] == v2[0] ? v1[1] > v2[1] : v1[0] < v2[0]; });
        // 重排完序后就变成了最长递增子序列的问题(以每个区间的第二个数为基准)
        vector<int> ret;
        ret.push_back(envelopes[0][1]);
        int n = envelopes.size();
        for (int i = 1; i < n; i++)
        {
            int t = envelopes[i][1];
            if (ret.back() < t)
                ret.push_back(t);
            else
            {
                int left = 0, right = ret.size() - 1;
                while (left < right)
                {
                    int middle = left + (right - left) / 2;
                    if (ret[middle] >= t)
                        right = middle;
                    else
                        left = middle + 1;
                }
                ret[left] = t;
            }
        }
        return ret.size();
    }
};

27可被三整除的最大和

oj链接:可被三整除的最大和

class Solution
{
public:
    int maxSumDivThree(vector<int> &nums)
    {
        int sum = 0, ret = 0;
        for (auto &e : nums)
            sum += e;
        if (sum % 3 == 0)
            return sum;
        else if (sum % 3 == 1)
        {
            // 定义y1和y2来求最小值和次小值 注意数据溢出问题
            int x = 0x3f3f3f3f3f, y1 = 0x3f3f3f3f3f, y2 = 0x3f3f3f3f3f;
            for (auto &e : nums)
            {
                if (e % 3 == 1)
                    x = min(x, e);
                else if (e % 3 == 2)
                {
                    if (e < y1)
                    {
                        y2 = y1;
                        y1 = e;
                    }
                    else if (y1 <= e && e <= y2)
                        y2 = e;
                }
            }
            ret = max(sum - x, sum - y1 - y2);
        }
        else
        {
            int y = 0x3f3f3f3f3f, x1 = 0x3f3f3f3f3f, x2 = 0x3f3f3f3f3f;
            for (auto &e : nums)
            {
                if (e % 3 == 1)
                {
                    if (e < x1)
                    {
                        x2 = x1;
                        x1 = e;
                    }
                    else if (x1 <= e && e <= x2)
                        x2 = e;
                }
                else if (e % 3 == 2)
                    y = min(y, e);
            }
            ret = max(sum - y, sum - x1 - x2);
        }
        return ret;
    }
};

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

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

相关文章

【HTTP】HTTP协议

一个Web Server就是个服务器软件&#xff08;程序&#xff09;&#xff0c;或者是运行这个服务器软件的硬件&#xff08;计算机&#xff09;&#xff0c;其主要功能是通过HTTP协议与客户端进行通信&#xff0c;来接收&#xff0c;存储&#xff0c;处理来自客户端的HTTP请求&…

分布式存储方式的地理信息数据仓库建立设计方案

背景介绍 随着地理信息技术的发展,GIS系统中的数据规模越来越庞大,传统集中式存储方式在处理高并发查询和大规模空间分析时面临瓶颈。分布式存储通过数据分片、并行计算等技术,为地理信息数据管理提供了新的解决方案。适用场景: 遥感影像存储与分析 城市交通数据管理(如G…

深度学习案例:ResNet50模型+SE-Net

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 回顾ResNet模型 ResNet&#xff0c;即残差网络&#xff0c;是由微软研究院的Kaiming He及其合作者于2015年提出的一种深度卷积神经网络架构。该网络架构的核心创新在于引入了“残差连接”&…

droppath

DropPath 是一种用于正则化深度学习模型的技术&#xff0c;它在训练过程中随机丢弃路径&#xff08;或者说随机让某些部分的输出变为零&#xff09;&#xff0c;从而增强模型的鲁棒性和泛化能力。 代码解释&#xff1a; import torch import torch.nn as nn # 定义 DropPath…

KAN-Transfomer——基于新型神经网络KAN的时间序列预测

1.数据集介绍 ETT(电变压器温度)&#xff1a;由两个小时级数据集&#xff08;ETTh&#xff09;和两个 15 分钟级数据集&#xff08;ETTm&#xff09;组成。它们中的每一个都包含 2016 年 7 月至 2018 年 7 月的七种石油和电力变压器的负载特征。 traffic(交通) &#xff1a;描…

03-12、SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

SpringCloud Alibaba第十二章&#xff0c;升级篇&#xff0c;服务注册与配置中心Nacos 一、为什么SpringCloud Alibaba 1、为什么 有了spring cloud这个微服务的框架&#xff0c;为什么又要使用spring cloud alibaba这个框架了&#xff1f;最重要的原因在于spring cloud中的…

算法之旅:LeetCode 拓扑排序由简入繁完全攻略

前言 欢迎来到我的算法探索博客&#xff0c;在这里&#xff0c;我将通过解析精选的LeetCode题目&#xff0c;与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验&#xff0c;旨在帮助每一位读者提升编程技能&#xff0c;领略算法之美。 &#x1f449;更多高频有趣Lee…

MATLAB 离散点构建凸包,计算面积周长(88)

MATLAB 离散点构建凸包,计算面积周长(88) 一、算法介绍二、算法实现1.代码2.总结这是缘,亦是命中最美的相见!!! 一、算法介绍 给定一堆离散点云,构建二维凸包,并计算凸包的面积和周长。 凸包是由顺序顶点构成的,因此凸包也可以当作多边形,则例的面积和周长计算方法…

Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型

创建HDL兼容的Simulink模型 一、使用Balnk DUT模板二、从HDL Coder库中选择模块三、为DUT开发算法/功能四、为设计创建Testbench五、仿真验证设计功能六、Simulink模型生成HDL代码 这个例子说明了如何创建一个用于生成HDL代码的Simulink模型。要创建兼容HDL代码生成的MATLAB算法…

【智商检测——DP】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M 110; int f[N][M]; int main() {int n, k;cin >> n >> k;for(int i 1; i < n; i){int x;cin >> x;f[i][0] __gcd(f[i-1][0], x);for(int j 1; j < min(i, k)…

神经网络入门实战:(九)分类问题 → 神经网络模型搭建模版和训练四步曲

(一) 神经网络模型搭建官方文档 每一层基本都有权重和偏置&#xff0c;可以仔细看官方文档。 pytorch 官网的库&#xff1a;torch.nn — PyTorch 2.5 documentation Containers库&#xff1a;用来搭建神经网络框架&#xff08;包含所有的神经网络的框架&#xff09;&#xff1b…

不同云计算网络安全等级

导读云计算的本质是服务&#xff0c;如果不能将计算资源规模化/大范围的进行共享&#xff0c;如果不能真正以服务的形式提供&#xff0c;就根本算不上云计算。 等级保护定级流程 定级是开展网络安全等级保护工作的 “基本出发点”&#xff0c;虚拟化技术使得传统的网络边界变…

langchain实现基于sql的问答

1. 数据准备 import requestsurl "https://storage.googleapis.com/benchmarks-artifacts/chinook/Chinook.db"response requests.get(url)if response.status_code 200:# Open a local file in binary write modewith open("Chinook.db", "wb&qu…

flink学习(14)—— 双流join

概述 Join:内连接 CoGroup&#xff1a;内连接&#xff0c;左连接&#xff0c;右连接 Interval Join&#xff1a;点对面 Join 1、Join 将有相同 Key 并且位于同一窗口中的两条流的元素进行关联。 2、Join 可以支持处理时间&#xff08;processing time&#xff09;和事件时…

深入学习指针(5)!!!!!!!!!!!!!!!

文章目录 1.回调函数是什么&#xff1f;2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递…

CEF127 编译指南 Linux篇 - 构建CEF Client(七)

1. 引言 在完成 CEF127 的编译工作后&#xff0c;我们需要了解如何正确运行编译后的程序。本文将详细介绍如何使用 CMake 构建示例程序&#xff0c;并成功运行 CEF 客户端。通过本文的指导&#xff0c;您将能够在 Linux 环境下顺利运行 CEF 应用程序。 2. 准备工作 2.1 确认…

位图的学习

一&#xff0c;位图介绍 位图&#xff08;Bitmap&#xff09;是一种用于存储图像的方式&#xff0c;它通过二维矩阵&#xff08;由像素组成&#xff09;来表示图像的每一个细节。每个像素通常对应一个特定的颜色值&#xff0c;位图的每个“位”就代表了图像的一个像素。 位图…

电脑与优傲协作机器人(实体)的TCP通讯(操作记录)

目录 一、UR通信端口 二、电脑&#xff08;客户端&#xff09;连接协作机器人&#xff08;服务端&#xff09; 1.设置网络方法 2.检查设置 3.示教器切换远程控制&#xff08;注&#xff09; 4.客户端与协作机器人建立连接 5.连接测试 三、电脑&#xff08;服务端&#…

后端 Java发送邮件 JavaMail 模版 20241128测试可用

配置授权码 依赖 <dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.5</version> </dependency> <dependency><groupId>com.sun.mail</groupId><artifa…

12.2 正则表达式

object test04 {def main(args: Array[String]): Unit {//1.定义规则。写正则表达式val reg "\\d".r // \\d表示找数字//2.在目标字符串中&#xff0c;去按照这个规则去找符合的子字符串val result reg.findFirstIn("我是who&#xff0c;我的电话是&#xff…