京东笔试 京东笔试题 0914
笔试时间:2024年09月14日 秋招
历史笔试传送门:2023秋招笔试合集
第一题
题目
有一个序列a1,a2,...,an,牛牛将对这个序列切一刀,使其分为两个不相交的非空子序列,一个序列为a1,a2,...ap,另一个序列为ap+1,...,an。牛牛切割的代价为两个字序列元素和的乘积,牛牛想知道切割代价最小是多少?
输入描述
第一行输入n (1 <= n <= 1e6)
第二行输入n个数 对于每个数ai。(-1e3 <= ai <= 1e3)
输出描述
输出答案
样例输入
5
1 2 3 4 5
样例输出
14
参考题解
遍历第一个序列
C++:[此代码未进行大量数据的测试,仅供参考]
#include<iostream>
#include<vector>
using namespace std;
#define ll long long
int main() {
int n;
cin >> n;
vector<int> a(n);
int sum = 0;
ll ans = 1e18;
for (int i = 0; i < n; i++) {
cin >> a[i];
sum += a[i];
}
int lsum = 0;
for (int i = 0; i < n - 1; i++) {
lsum += a[i];
sum -= a[i];
ans = min(ans, 1LL * sum * lsum);
}
cout << ans << "\n";
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Vector<Integer> a = new Vector<>(n);
int sum = 0;
long ans = (long) 1e18;
for (int i = 0; i < n; i++) {
int num = sc.nextInt();
a.add(num);
sum += num;
}
int lsum = 0;
for (int i = 0; i < n - 1; i++) {
lsum += a.get(i);
sum -= a.get(i);
ans = Math.min(ans, (long) sum * lsum);
}
System.out.println(ans);
sc.close();
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
def main():
n = int(input())
a = list(map(int, input().split()))
total_sum = sum(a)
ans = 1e18
lsum = 0
for i in range(n - 1):
lsum += a[i]
total_sum -= a[i]
ans = min(ans, total_sum * lsum)
print(int(ans))
if __name__ == "__main__":
main()
第二题
题目
给定n个字符串,并且给定一个长为26的字符串rank,代表每个字母处的位置,请你根据这个rank对这n个字符串进行排序。
输入描述
第一行输入rank(size(rank) = 26)
第二行输入n(1 <= n <= 1000)
接下来n行输入n个字符串,每个字符串的长度不超过1000。
输出描述
输出排序后的字符串
样例输入一
abcdefghijklmnopqrstuvwxyz
3
aaa
aac
aaaa
样例输出一
aaa
aaaa
aac
说明:按照原字母表排序
样例输入二
zyxwvutsrpqonmlkjihgfedcba
3
aaa
aac
aaaa
样例输出二
aac
aaa
aaaa
说明:字母表变了,对应的顺序也变了。
参考题解
根据字母表对每个字母进行替换处理,记录下标,然后排序即可。
C++:[此代码未进行大量数据的测试,仅供参考]
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string rank;
cin >> rank;
int n;
cin >> n;
vector<string> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int order[26];
for (int i = 0; i < 26; i++) {
order[rank[i] - 'a'] = i;
}
vector<pair<string, int>> b(n);
for (int i = 0; i < n; i++) {
string s = a[i];
for (int j = 0; j < s.size(); j++) {
s[j] = (char)(order[s[j] - 'a'] + 'a');
}
b[i] = {s, i};
}
sort(b.begin(), b.end());
for (int i = 0; i < n; i++) {
cout << a[b[i].second] << "\n";
}
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String rank = sc.next();
int n = sc.nextInt();
String[] a = new String[n];
for (int i = 0; i < n; i++) {
a[i] = sc.next();
}
int[] order = new int[26];
for (int i = 0; i < 26; i++) {
order[rank.charAt(i) - 'a'] = i;
}
List<Pair> b = new ArrayList<>();
for (int i = 0; i < n; i++) {
StringBuilder s = new StringBuilder(a[i]);
for (int j = 0; j < s.length(); j++) {
s.setCharAt(j, (char) (order[s.charAt(j) - 'a'] + 'a'));
}
b.add(new Pair(s.toString(), i));
}
Collections.sort(b, Comparator.comparing(p -> p.first));
for (int i = 0; i < n; i++) {
System.out.println(a[b.get(i).second]);
}
sc.close();
}
static class Pair {
String first;
int second;
Pair(Stri
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。
查看11道真题和解析
