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多种语言版本,持续更新中。