秋招 8.24京东笔试 JDS-2025届秋招-后端开发工程师-第3批

8.24 JDS-2025届秋招-后端开发工程师-第3批

前言

京东不同的语言(C++, Java, Go)卷子是不同的,一开始会让你选对应的语言。

选择题分为八股文和编程逻辑题,编程大题有三题(15, 20, 25)

大题,笔者AC了前两道,最后一题暴力20%

希望可以进面!

1、

输入只一个n(-10100 <= n <= 10100),输出0 ~ n有多少个数是100的倍数。

知识点:库函数的使用

c 复制代码
#include<bits/stdc++.h>
using namespace std;
/*#define int long long*/
#define endl '\n'
#define P pair<int, int>
#define x first
#define y second
const int maxl = 1e6 + 7;

string s;

void slove() {
    cin >> s;
    if (s[0] == '-' || s.size() < 3) cout << 0;
    else {
        cout << s.substr(0, s.size() - 2) << endl; 
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}

2

一个n * m的矩阵,有k次询问,每次询问包含 op, x, y。

op为字符c, 把(x, y)位置变成黑色

op为字符r, 输出(x, y)位置右边第一个白色方格位置的坐标。

op为字符l, 输出(x, y)位置左边第一个白色方格位置的坐标。

op为字符u, 输出(x, y)位置上边第一个白色方格位置的坐标。

op为字符d(反正是最后一种操作,具体啥字符我忘了), 输出(x, y)位置下边第一个白色方格位置的坐标。

知识点:模拟

c 复制代码
#include<bits/stdc++.h>
using namespace std;
/*#define int long long*/
#define endl '\n'
#define P pair<int, int>
#define x first
#define y second
const int maxl = 1e2 + 7;

int n, m, k;
int G[maxl][maxl];
void slove() {
    cin >> n >> m >> k;
    while (k--) {
        char op;
        int x, y;
        cin >> op >> x >> y;
        if (op == 'c') G[x][y] = 1;
        else if (op == 'l') {
            bool flag = 0;
            while (--y > 0) {
                if (!G[x][y]) {
                    cout << x << " " << y << endl;
                    flag = 1;
                    break;
                }
            }
            if (!flag) cout << -1 << endl;
        } else if (op == 'r') {
            bool flag = 0;
            while (++y <= m) {
                if (!G[x][y]) {
                    cout << x << " " << y << endl;
                    flag = 1;
                    break;
                }
            }
            if (!flag) cout << -1 << endl;
        } else if (op == 'u') {
            bool flag = 0;
            while (--x > 0) {
                if (!G[x][y]) {
                    cout << x << " " << y << endl;
                    flag = 1;
                    break;
                }
            }
            if (!flag) cout << -1 << endl;
        } else {
            bool flag = 0;
            while (++x <= n) {
                if (!G[x][y]) {
                    cout << x << " " << y << endl;
                    flag = 1;
                    break;
                }
            }
            if (!flag) cout << -1 << endl;
        }
    }   
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}

3

有n根木棍排成一列,第i根木棍的长度为a;。

请你从中选出一个最长的子区间,使得区间内任意三根木棍都能构成三角形。只需要输出选出的区间端点即可。I输入描述

第一行一个整数n(3≤n≤106) , 表示木棍的数量。

第二行n个整数,第i个整数a;(1≤a;≤109)表示第i根木棍的长度。

输出描述

输出一行两个整数,表示最长的满足条件的区间的两个端点,如果有多个满足条件的区间,输出左端点最小的区间。保证答案存在。

示例

输入

3

1 2 3

输出

1 2

输入

9

2 3 3 3 1 1 3 3 3

输出

1 4

最初的暴力过20%,被我搞丢了,但是这个应该比我原来的更优秀,但是最后一秒没交上去,大家看看对不对。

c 复制代码
#include <algorithm>
#include<bits/stdc++.h>
#include <climits>
using namespace std;
#define int long long
#define endl '\n'
#define P pair<int, int>
#define x first
#define y second
const int maxl = 1e6 + 7;
struct node {
    int l;
    int r;
    int len;
};

int n;
int a[maxl];
node ans;
map<int, int> mp;

void slove() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];

    int minn, maxn;
    for (int l = 1, r = 1; r <= n; r++) {
        mp[a[r]]++;

        minn = mp.begin()->first;
        maxn = mp.end()->first;
        while (2 * minn <= maxn) {
            if (!--mp[a[l]]) mp.erase(a[l]);
            l++;
            minn = mp.begin()->first;
            maxn = mp.end()->first;
        }

        if (2 * minn > maxn && ans.len < r - l + 1) {
            ans.l = l;
            ans.r = r;
            ans.len = r - l + 1;
        }
        /*cout << "l:" << l << " r:" << r << endl;*/
        /*for (auto [k, v] : mp) cout << "k-->" << k << " v-->" << v << endl;*/
        /*cout << endl;*/
    }
    cout << ans.l << " " << ans.r << endl;
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}

下面是我根据网友思路写的双指针加滑动窗口,友友们可以一起讨论对不对。

c 复制代码
#include <algorithm>
#include<bits/stdc++.h>
#include <deque>
using namespace std;
/*#define int long long*/
#define endl '\n'
#define P pair<int, int>
#define x first
#define y second
const int maxl = 1e6 + 7;
struct node {
    int l;
    int r;
    int len;
};

int n;
int a[maxl];
node ans;
deque<int> min_dq, max_dq;

void slove() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];

    for (int l = 1, r = 1; r <= n; r++) {
        while (!max_dq.empty() && a[max_dq.back()] < a[r]) max_dq.pop_back();
        while (!min_dq.empty() && a[min_dq.back()] > a[r]) min_dq.pop_back();
        max_dq.push_back(r);
        min_dq.push_back(r);

        while (!max_dq.empty() && !min_dq.empty() && 2 * a[min_dq.front()] <= a[max_dq.front()]) {
            l++;
            if (max_dq.front() < l) max_dq.pop_front();
            if (min_dq.front() < l) min_dq.pop_front();
        }

        if (ans.len < r - l + 1) {
            ans.l = l;
            ans.r = r;
            ans.len = r - l + 1;
        }
    }

    if (ans.len <= 2) cout << 1 << " " << 2 << endl;
    else cout << ans.l << " " << ans.r << endl;
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) slove();
    return 0;
}
相关推荐
JingHongB9 分钟前
代码随想录算法训练营Day55 | 图论理论基础、深度优先搜索理论基础、卡玛网 98.所有可达路径、797. 所有可能的路径、广度优先搜索理论基础
算法·深度优先·图论
weixin_4327022612 分钟前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
小冉在学习14 分钟前
day52 图论章节刷题Part04(110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长 )
算法·深度优先·图论
Repeat71515 分钟前
图论基础--孤岛系列
算法·深度优先·广度优先·图论基础
小冉在学习18 分钟前
day53 图论章节刷题Part05(并查集理论基础、寻找存在的路径)
java·算法·图论
武子康30 分钟前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
passer__jw7671 小时前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
Ocean☾1 小时前
前端基础-html-注册界面
前端·算法·html
顶呱呱程序1 小时前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
爱吃生蚝的于勒2 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法