Funplus笔试 趣加笔试 Funplus秋招 0913
笔试时间:2025年9月13日
往年笔试合集:
第一题:扑克牌中的顺子
趣小加非常喜爱玩扑克,现在需要从若干副扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13;而大、小王为0,可以看成任意牌。另外,"A,10,J,Q,K"也是顺子。请你帮助趣小加实现上述功能。
输入描述
数组长度为5,数组的数据值为0~13。
输出描述
返回布尔值,表示是否为顺子。
样例输入
[1, 2, 3, 4, 5]
样例输出
true
参考题解
解题思路:
- 去重与记录极值:使用HashSet判断是否存在重复的非大小王(非0)牌,如果存在重复则不是顺子。同时记录非0牌中的最大值和最小值。
- 主要逻辑判断:在没有重复牌的情况下,如果max-min的差值小于5,那么这5张牌(包括大小王)一定能构成顺子。
- 特殊情况处理:检查A(1),10,J,Q,K这种特殊顺子,如果所有牌都是1或10-13,则也判定为顺子。
- 边界情况:如果牌组全是大小王,也视为顺子。
C++:
#include <vector> #include <unordered_set> #include <algorithm> using namespace std; class Solution { public: bool isStraight(vector<int>& nums) { if (nums.size() != 5) { return false; } unordered_set<int> uniqueNums; int minVal = 14; int maxVal = 0; for (int num : nums) { if (num == 0) { continue; } if (uniqueNums.count(num)) { return false; } uniqueNums.insert(num); minVal = min(minVal, num); maxVal = max(maxVal, num); } if (uniqueNums.empty()) { return true; } if (maxVal - minVal < 5) { return true; } bool isSpecialCase = true; for (int num : uniqueNums) { if (num > 1 && num < 10) { isSpecialCase = false; break; } } return isSpecialCase; } };
Java:
import java.util.ArrayList; import java.util.HashSet; import java.util.Set; public class Solution { public boolean isStraight(ArrayList<Integer> nums) { if (nums == null || nums.size() != 5) { return false; } Set<Integer> uniqueNums = new HashSet<>(); int min = 14; int max = 0; for (int num : nums) { if (num == 0) { continue; } if (uniqueNums.contains(num)) { return false; } uniqueNums.add(num); min = Math.min(min, num); max = Math.max(max, num); } if (uniqueNums.isEmpty()) { return true; } if (max - min < 5) { return true; }
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南