题解 | 而后单调

而后单调

https://www.nowcoder.com/practice/e108b72e995c4c33a1b9d68328a9c6bb

#include <iostream>
#include <map>
#include <vector>
using namespace std;
/*
 最朴素的想法。如果而后单调,那么肯定满足一下条件:
 1. 不包含重复元素。
 2. 原始数组存在一个至少长度为m的严格递增或者递减序列。

 这里我们使用map记录元素值和元素原始序号,map会自动根据插入的key排序,所以最终的map为递增key,如果想要满足2条件,只需要验证存在至少长度为m的value的数值(即原始序号)为严格递减或者递增。
*/

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n, m;
        cin >> n >> m;
        map<int, int> mm;

        for (int i = 0; i < n; i++) {
            int t;
            cin >> t;
            mm.insert(make_pair(t, i));//记录元素数值和原始序号
        }
        if (n!=mm.size()) {
            //如果这里,说明存在重复元素,直接NO
            cout<<"NO"<<endl;
            continue;
        }
        if (m==1) {
            //如果m=1直接YES
            cout<<"YES"<<endl;
            continue;
        }
        int front = -1;//记录上一个元素数值
        int si_s = 1;//记录递增序列大小
        int si_j = 1;//记录递减序列大小
        bool f = false;//记录是否找到m个单调序列
        for (auto p : mm) {
            if (front == -1) {
                front = p.second;
                continue;
            }
            //判断是否严格递增
            if ((p.second - front) == 1) {
                si_s++;
                si_j = 1;
                if (si_s == m) {
                    cout << "YES" << endl;
                    f = true;
                    break;
                }
            } else {
                si_s = 1;
            }
            //判断是否严格递减
            if ((p.second - front) == -1) {
                si_j++;
                si_s = 1;
                if (si_j == m) {
                    f = true;
                    cout << "YES" << endl;
                    break;
                }
            } else {
                si_j = 1;
            }
            front = p.second;
        }
        if (!f) {
            cout << "NO" << endl;
        }

    }
}

全部评论

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结:&nbsp;27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
牛客52811839...:实习要写出来业务和产出,你这写的像流水账没人看。项目经历也没有,换个极简简历试试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务