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等多种语言做法集合指南

查看14道真题和解析