前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【今日三题】排序子序列(模拟) / 消减整数(贪心) / 最长上升子序列(二)(贪心+二分)

【今日三题】排序子序列(模拟) / 消减整数(贪心) / 最长上升子序列(二)(贪心+二分)

作者头像
_小羊_
发布于 2025-05-04 02:11:23
发布于 2025-05-04 02:11:23
4200
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行

排序子序列(模拟)

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

const int N = 1e5 + 1;
int n, arr[N], res;

int main() 
{
    cin >> n;
    for (int i = 0; i < n; i++) cin >> arr[i];
    int i = 0;
    while (i < n)
    {
        if (i == n - 1) 
        {
            res++;
            break;
        }
        if (arr[i] > arr[i + 1])
        {
            while (i + 1 < n && arr[i] >= arr[i + 1]) i++;
            res++;
        }
        else if (arr[i] < arr[i + 1])
        {
            while (i + 1 < n && arr[i] <= arr[i + 1]) i++;
            res++;
        }
        else 
        {
            while (i + 1 < n && arr[i] == arr[i + 1]) i++;
        }
        i++;
    }
    cout << res << endl;
    return 0;
}

消减整数(贪心)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int t, h;

int main()
{
    cin >> t;
    while (t--)
    {
        int h = 0, cnt = 0, a = 1;
        cin >> h;
        while (h)
        {
            cnt++;
            h -= a;
            if (h % (2 * a) == 0) a *= 2;
        }
        cout << cnt << endl;
    }
    return 0;
}

最长上升子序列(二)(贪心+二分)

本题有两种常规做法:动态规划和贪心。dp的时间复杂度是N^2,本题的数据范围会超时,贪心的时间复杂度是N*logN,因此本题只能用贪心。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int LIS(vector<int>& a) {
        if (a.empty()) return 0;
        vector<int> v;
        v.push_back(a[0]);
        for (int i = 1; i < a.size(); i++)
        {
            if (a[i] > v.back()) v.push_back(a[i]);
            else
            {
                int l = 0, r = v.size() - 1;
                while (l < r)
                {
                    int mid = l + (r - l) / 2;
                    if (a[i] > v[mid]) l = mid + 1;
                    else r = mid;
                }
                v[r] = a[i];
            }
        }
        return v.size();
    }
};

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验