Funplus笔试 趣加笔试 Funplus秋招 0913

笔试时间:2025年9月13日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:扑克牌中的顺子

趣小加非常喜爱玩扑克,现在需要从若干副扑克牌中随机抽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

参考题解

解题思路:

  1. 去重与记录极值:使用HashSet判断是否存在重复的非大小王(非0)牌,如果存在重复则不是顺子。同时记录非0牌中的最大值和最小值。
  2. 主要逻辑判断:在没有重复牌的情况下,如果max-min的差值小于5,那么这5张牌(包括大小王)一定能构成顺子。
  3. 特殊情况处理:检查A(1),10,J,Q,K这种特殊顺子,如果所有牌都是1或10-13,则也判定为顺子。
  4. 边界情况:如果牌组全是大小王,也视为顺子。

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

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务