shopee笔试 shopee笔试题 虾皮笔试 0825
笔试时间:2024年08月25日 秋招 题均为核心代码模型
历史笔试传送门:2023秋招笔试合集
第一题
题目
给定单链表头节点head,实现一个调整单链表的函数,使得每k个节点之间逆序,如果最后不够K个节点,则不进行调整。
样例输入
1,2,3,4,5,6,7,8,9,10,11,12,13,3
样例输出
3,2,1,6,5,4,9,8,7,12,11,10,13
参考题解
********
C++:[此代码未进行大量数据的测试,仅供参考]
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* dummy = new ListNode(0, head);
ListNode* cur = dummy;
while (true) {
auto cur1 = cur;
for (int i = 0; i < k && cur1; i++) {
cur1 = cur1->next;
}
if (!cur1)
break;
auto a = cur->next, b = a->next;
for (int i = 0; i < k - 1; i++) {
auto c = b->next;
b->next = a;
a = b, b = c;
}
auto t = cur->next;
cur->next->next = b;
cur->next = a;
cur = t;
}
return dummy->next;
}
Java:[此代码未进行大量数据的测试,仅供参考]
public class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0, head);
ListNode cur = dummy;
while (true) {
ListNode cur1 = cur;
for (int i = 0; i < k && cur1 != null; i++) {
cur1 = cur1.next;
}
if (cur1 == null)
break;
ListNode a = cur.next, b = a.next;
for (int i = 0; i < k - 1; i++) {
ListNode c = b.next;
b.next = a;
a = b;
b = c;
}
ListNode t = cur.next;
cur.next.next = b;
cur.next = a;
cur = t;
}
return dummy.next;
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
class Solution:
def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
dummy = ListNode(0, head)
cur = dummy
while True:
cur1 = cur
for i in range(k):
if not cur1:
break
cur1 = cur1.next
if not cur1:
break
a = cur.next
b = a.next
for i in range(k - 1):
c = b.next
b.next = a
a = b
b = c
t = cur.next
cur.next.next = b
cur.next = a
cur = t
return dummy.next
第二题
题目
在两个数组中找出满足要求的两个数 详细描述 给定正整数X,两个正整数数组Arr1和Arr2,请在Arr1和Arr2中各找一个数,使得这两个数字之 和与X最接近,输出两个值对应的下标。
样例输入
[1,5,13,15],[10,11,17,20],20
样例输出
[0,3]
参考题解
对数组 Arr1 和 Arr2 分别进行排序,并保留它们的原始下标。使用双指针,一个指向 Arr1 的起始位置,另一个指向 Arr2 的末尾。计算当前两个指针所指向元素的和与目标值 X 的差距,并根据差距调整指针的移动方向。记录最小差距及其对应的下标。当两个指针相遇时,输出对应的下标。
C++:[此代码未进行大量数据的测试,仅供参考]
vector<int> findClosetPair(vector<int>& arr1, vector<int>& arr2, int x) {
int n1 = arr1.size();
int n2 = arr2.size();
// 存储原始下标的数组
vector<pair<int, int>> arr1Indexed, arr2Indexed;
for (int i = 0; i < n1; ++i) {
arr1Indexed.push_back({arr1[i], i});
}
for (int i = 0; i < n2; ++i) {
arr2Indexed.push_back({arr2[i], i});
}
// 对两个数组按值排序
sort(arr1Indexed.begin(), arr1Indexed.end());
sort
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024 BAT笔试合集 文章被收录于专栏
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。


