富途9.18后端笔试

第一题
数组经过+1,-1,不操作后出现次数最多的数的次数
思路:哈希表
#include<iostream>
#include<map>
#include<math.h>
using namespace std;

const int N = 3e5 + 10;
int q[N];
map<int, int> m;
int main() {
    int n;
    cin >> n;
    for(int i = 0; i < n; i ++) cin >> q[i];
    for(int i = 0; i < n; i ++) {
        m[q[i] + 1] ++;
        m[q[i] - 1] ++;
        m[q[i]] ++;
    }
    int a, b = 0;
    for(auto & t : m) {
        if(t.second > b) {
            a = t.first;
            b = t.second;
        }
    }
    int sum = 0;
    //cout << a << endl;
    for(int i = 0; i < n; i ++) {
        if(abs(a - q[i]) <= 1) sum ++;
    }
    cout << sum;
    return 0;
}
第二题
移动杯子,使得所有杯子中都存在饮料
思路:排序+二分
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
const int N = 1e5 + 10;
int q[N];
//二分查找
int query(int l, int r, int mx) {
    while(l < r) {
        int mid = (l + r + 1) >> 1;
        if(q[mid] <= mx) {
            l = mid;   
        } else {
            r = mid - 1;
        }
    }
    return l;
}
int main() {
    int n;
    cin >> n;
    for(int i = 0; i < n; i ++) cin >> q[i];
    sort(q, q + n);
    int res = 0x3f3f3f3f;
    for(int i = 0; i < n; i ++) {
        int mx = q[i] + n - 1;
        //二分
        int j = query(i, n - 1, mx);
        int num = j - i + 1;
        res = min(res, n - num);
    }
    cout << res;
}








#笔试题目##秋招#
全部评论
第一题最后cout << b不可以吗,为什么要重新扫描一遍数组呢
点赞
送花
回复 分享
发布于 2022-09-18 16:48 陕西
请问第二题可不可以说的详细一点
点赞
送花
回复 分享
发布于 2022-09-18 16:57 广东
国泰君安
校招火热招聘中
官网直投
第二题滑动窗口也可以做
1
送花
回复 分享
发布于 2022-09-18 17:08 广东
第二题滑动窗口超时只A了70%,我是***
点赞
送花
回复 分享
发布于 2022-09-18 16:56 湖北
为什么我没有收到笔试😭
点赞
送花
回复 分享
发布于 2022-09-18 20:41 广东

相关推荐

点赞 评论 收藏
分享
8 13 评论
分享
牛客网
牛客企业服务