米哈游笔试前端9.14 AC C++

一个身高序列,排队,相邻两人身高平均数不是整数的,越多越好,输出最终队列

两种思路:

① 奇、偶身高分别一个栈,然后交替出栈入队,最后剩下的全入队。注意,因为每个人对左右都能产生共献,所以要人数多的先入队,比如【偶,奇,偶】

用到了O(N)的额外空间

#include <bits/stdc++.h>
using namespace std;

const size_t MAX_N = 100002;
uint a[MAX_N];

int main() {
    int n;
    cin >> n;
    stack<uint> odd, even;
    for(int i = 0; i < n; i++) {
        cin >> a[i];
        if(a[i] & 1) odd.push(a[i]);
        else even.push(a[i]);
    }

    vector<uint> order;
    while(odd.size() && even.size()) {
        if(odd.size() > even.size()) {
            order.push_back(odd.top());
            order.push_back(even.top());
        }
        else {
            order.push_back(even.top());
            order.push_back(odd.top());
        }
        odd.pop();
        even.pop();
    }

    while(odd.size()) {
        order.push_back(odd.top());
        odd.pop();
    }

    while(even.size()) {
        order.push_back(even.top());
        even.pop();
    }

    for(int i = 0; i < order.size(); i++)
        cout << order[i] << (i == order.size() - 1 ? "\n" : " ");
    return 0;
}

② 基本思路同上,但是奇偶各一个链表,少的往多的里面插,变成经典的合并链表,O(1)空间复杂度

代码略

给定字符串,查找存在连续k个"mihoyo"的最短字串,不存在输出-1,存在输出起始、末尾下标

基本思路:找到所有模式串的下标,保存到一个数组,然后按左右下标间隔k,遍历下标数组,计算最短长度

#include <bits/stdc++.h>
using namespace std;

const string TARGET = "mihoyo";
const size_t TARGET_LEN = TARGET.size();

int main() {
    int n, k;
    cin >> n >> k;
    string str;
    cin >> str;
    vector<size_t> mihoyoPosition;
    size_t p = -1;
    // 全部出现位置
    while((p = str.find(TARGET, p + 1)) != string::npos) mihoyoPosition.push_back(p);
    // 不足k个
    if(mihoyoPosition.size() < k) {
        cout << "-1\n";
        return 0;
    }
    // 找结果
    pair<int, int> answer;
    size_t minLength = UINT_MAX;
    int l = 0, r = k - 1;
    while(r < mihoyoPosition.size()) {
        size_t len = mihoyoPosition[r] - mihoyoPosition[l];
        if(len < minLength) {
            minLength = len;
            answer = {mihoyoPosition[l], mihoyoPosition[r] + TARGET_LEN - 1};
        }
        ++l, ++r;
    }
    cout << answer.first << ' ' << answer.second << '\n';
    return 0;
}

一个序列,每一次操作可以使一个数翻倍,使得序列成为严格递增的最少操作次数

计算每一个元素,严格大于前一个数需要翻倍的次数
的下一个数
对于,可以解出
再考虑对于每一个数被翻倍后,后面的数理应同等地一起进行翻倍(或者说,需要先翻完前一个数翻倍的次数,再去做“为了大于前一个数而进行的翻倍”)
因此将每一个数需要的存到一个数组里,然后计算前缀和,最后再求和
仔细考虑特殊情况:
,即已经满足了严格递增,解出的会是0或负数,负数实际有意义,说明前缀和累加到自己的时候,可以少翻几次。但是前缀和始终应当非负。
恰好差了2的幂次倍数,为了“严格递增”,需要加一
代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

const size_t MAX_N = 100002;
int a[MAX_N], mark[MAX_N]; /* 记录每个数的k(大于前一个数需要翻倍的次数) */

int main() {
    size_t n;
    cin >> n;
    for(int i = 0; i < n; i++) cin >> a[i];

    for(int i = 1; i < n; i++) {
        int k = int(ceil(log2(a[i - 1]) - log2(a[i])));
        // 如果前后两个正好差2^t倍,多乘一个2(为了严格递增)
        double t = log2(a[i - 1] * 1.0 / a[i]);
        mark[i] = abs(ceil(t) - floor(t)) <= 1E-6 ? k + 1 : k;
    }
    LL ans = 0, sum = 0;
    for(int i = 1; i < n; i++) {
        sum = sum + mark[i];
        if(sum < 0) sum = 0;
        ans += sum;
    }
    cout << ans << '\n';
    return 0;
}
#笔试题目##米哈游笔试##米哈游秋招##米哈游23秋招笔试心得体会#
全部评论
学长过了吗
点赞 回复 分享
发布于 2023-06-10 23:51 浙江
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-16 12:42 北京

相关推荐

01-17 18:15
已编辑
门头沟学院 前端工程师
从上午约我面试然后他迟到,然后中午发消息打电话给我说重约面试时间,我就该意识到。【管理不规范,只是这家公司最小的问题】他妈一个不是技术的人来给我技术面。。。连vvue什么?连react是什么?连普通的HTTP请求是什么?这些东西都不懂的人来给我做技术面,我真的。。。。他妈浪费我40分钟。。一天面了三场,这家公司属实牛逼。不停的问我说上班下班时间谁来派任务公司在哪个区发展怎么样,公司的管理模式什么样,培养机制怎么样带教负责什么。如果出bug了谁来负责。我真的求你了别闹了。我答了15分钟,我已经很不想回答了。然后他就问了我一些很招笑的面试问题。问我前端框架架构设计怎么设计,Websocket可以实现SSE吗??最后还要我硬说,为什么我们公司没转正?为什么?为什么?我说我怎么知道。。这是领导决定,又不是我决定,他说让我分析一下。。。我真的草了,这个人是来搞我的吗?我最后问我说这个没有技术面,他说他就是技术面虽然我今天面的另外两家也很逆天。一个人不停的吹牛,自己100人的公司是全国前几,吹牛了一个小时。我中途几次想跑,真的是底下玩手机在听他那吹牛。。然后最后来了句说,我承诺的东西要实现哦,不然的话,公司会追责的,我我请问我承诺了什么?从头到尾也没有说让我承诺什么。而且我只是作为一个小小的前端卡拉咪,应届生。我要承担什么??好崩溃。。好崩溃的,一天面了三场。两家1000-9999的公司。面试官问的都很傻逼,甚至有些东西我问他估计都答不出来。。&nbsp;我这是在干嘛呀?浪费我一天的时间,我的奶奶。。我本来是抱着说我很菜,我要面试中发现自己的问题,现在来看他妈的这三场面试,面试本身就是问题。。
点赞 评论 收藏
分享
ldyllic:飞神,985+美团+腾讯+京东,无敌飞飞神
点赞 评论 收藏
分享
评论
3
16
分享

创作者周榜

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