58同城笔试 58同城笔试题 0920
笔试时间:2024年09月20日 秋招
历史笔试传送门:2023秋招笔试合集
第一题
题目
给两个二维数组a和b,长度分别为n和m,其中a[i] = {start_i, end_i},b[i] = {start_i, end_i}。a中的区间不相交,b中的区间也不相交,且a和b中的区间均已按照左端点排好序(升序)。求a和b中相交的区间并返回。
输入描述
区间list。
0 < start_i < end_i < start_(i + 1) < 10000
输出描述
输出二维数组表示相交的所有区间。
样例输入
[[0, 3], [5, 9], [11, 13]], [[2, 6], [8, 10]]
样例输出
[[2, 3], [5, 6], [8, 9]]
参考题解
双指针
C++:[此代码未进行大量数据的测试,仅供参考]
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<vector<int>> findIntersection(vector<vector<int>>& a, vector<vector<int>>& b) {
int n = a.size();
int m = b.size();
vector<vector<int>> ans;
for (int i = 0, j = 0; i < n && j < m; ) {
int l1 = a[i][0], r1 = a[i][1];
int l2 = b[j][0], r2 = b[j][1];
if (r1 < l2) {
i++;
} else if (r2 < l1) {
j++;
} else {
ans.push_back({max(l1, l2), min(r1, r2)});
if (r1 < r2) {
i++;
} else {
j++;
}
}
}
return ans;
}
};
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<int[]> findIntersection(List<int[]> a, List<int[]> b) {
int n = a.size();
int m = b.size();
List<int[]> ans = new ArrayList<>();
int i = 0, j = 0;
while (i < n && j < m) {
int l1 = a.get(i)[0], r1 = a.get(i)[1];
int l2 = b.get(j)[0], r2 = b.get(j)[1];
if (r1 < l2) {
i++;
} else if (r2 < l1) {
j++;
} else {
ans.add(new int[] { Math.max(l1, l2), Math.min(r1, r2) });
if (r1 < r2) {
i++;
} else {
j++;
}
}
}
return ans;
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
class Solution:
def findIntersection(self, a: list[list[int]], b: list[list[int]]) -> list[list[int]]:
n = len(a)
m = len(b)
ans = []
i, j = 0, 0
while i < n and j < m:
l1, r1 = a[i][0], a[i][1]
l2, r2 = b[j][0], b[j][1]
if r1 < l2:
i += 1
elif r2 < l1:
j += 1
else:
ans.append([max(l1, l2), min(r1, r2)])
if r1 < r2:
i += 1
else:
j += 1
return ans
第二题
题目
给一个只有字符a和b组成的字符串s,请你计算将s分成两个非空子字符串(左边一个右边一个)的最大的分是多少?(左字符串的得分是a的个数,右字符串的得分是b的个数)。
输入描述
字符串s
2 <= s.length <= 500
输出描述
输出答案
样例输入
abbbab
样例输出
5
参考题解
遍历左字符串即可,注意非空的约束。
C++:[此代码未进行大量数据的测试,仅供参考]
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return int整型
*/
int StringSplit(string str) {
int n = str.size();
int a = 0, b = 0;
for (char c : str) {
if (c == 'b') {
b++;
}
}
int ans = 0;
for (int i = 0; i < n - 1; i++) {
if (str[i] == 'a') {
a++;
}else {
b--;
}
ans = max(ans, a + b);
}
return ans;
}
};
Java:[此代码未进行大量数据的测试,仅供参考]
class Solution {
public int StringSplit(String str) {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024 BAT笔试合集 文章被收录于专栏
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。
查看27道真题和解析
