笔试专题(十五)

排序子序列

题目链接
在这里插入图片描述

题解

1. 贪心 + 模拟
2. 1 2 3 2 2 应该是有两个排列子序列的,所以i == n-1时ret++
3. 把水平的位置和上升部分,水平位置和下降部分分为一个排列子序列

在这里插入图片描述

代码

#include <iostream>
using namespace std;


const int N =1e5 + 10;
int a[N];

int main()
{
    int n;
    cin >> n;
    
    for(int i = 0;i < n;i++) cin >> a[i];
    
    // 开始并不知道是上升的还是下降的,加加跳过水平的位置
    int ret = 0;// 统计最少的排序子序列
    int i = 0;
    while(i < n)
    {
        while(i + 1 < n && a[i] == a[i+1]) i++;
        if(i == n-1)
        {
            ret++;
            break;
        }
        if(a[i] > a[i+1])
        {
            while(i + 1 < n && a[i] >= a[i+1]) i++;
            ret++;
        }
        else if(a[i] < a[i+1])
        {
            while(i + 1 < n && a[i] <= a[i+1]) i++;
            ret++;
        }
        i++;// 为了让水平的部分跳过
    }

    cout << ret << '\n';

    return 0;
}

消减整数

题目链接
在这里插入图片描述

题解

1. 贪心 + 数学
2. 第一次必须减1,a = 1,之后的数如果是a的2倍,那么a乘2,每次ret++
3. 贪心:如果这个数模2*a == 0就一直贪心

在这里插入图片描述

代码

#include<iostream>

using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int h;
        cin >> h;
        
        int ret = 0;
        int a = 1;
        while(h)
        {
            h -= a;
            ret++;
            if(h % (2*a) == 0)
            {
                a *= 2;
            }
        }
        cout << ret << '\n';
    }
    
    return 0;
}

最长公共子序列(二)

题目链接
在这里插入图片描述

题解

1. 贪心 + 二分
2. 时间复杂度:O(N*logN)
3. 动态规划的时间复杂度:O(N^2)

在这里插入图片描述

代码

class Solution 
{
    int dp[100010] = {0};
    int pos = 0;
public:
    int LIS(vector<int>& a) 
    {
        for(auto x : a)
        {
            if(pos == 0 || x > dp[pos])
            {
                dp[++pos] = x;
            }
            else 
            {
                // 二分
                int l = 1,r = pos;
                while(l < r)
                {
                    int mid = (l + r) / 2;
                    if(dp[mid] >= x) r = mid;
                    else l = mid + 1; 
                }
                dp[l] = x;
            }
        }    
        return pos;
    }
};
校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题, 与传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事和失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前与用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆和食堂。 拾领校园失物招领小程序继承了寻物启事和失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,类别、地点等相关信息, 并且可以填写手机号开启认领验证,并可以一键生成二维码分享或分享至群聊和朋友圈。 列表内可以筛选物品类别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报分享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值