笔试模拟 day9

观前提醒:

笔试所有系列文章均是记录本人的笔试题思路与代码,从中得到的启发和从别人题解的学习到的地方,所以关于题目的解答,只是以本人能读懂为目标,如果大家觉得看不懂,那是正常的。如果对本文的某些知识有不同的观点,欢迎讨论。

题目链接:

第一题:添加逗号_牛客题霸_牛客网

第二题:跳台阶_牛客题霸_牛客网

第三题:扑克牌顺子_牛客题霸_牛客网

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

第一题 

笔试模拟 day9_第1张图片

思路:

一道很简单的模拟题,可以根据输入的数字,直接取三位判断一下,添加",",但是要注意由于我们的string的添加使用的是+=接口,所以在结尾处我们要逆序一下string。

同时还要注意一下:开头可能多填了逗号,特判一下

代码: 

#include 
#include 
#include 
#include 
using namespace std;

int main() {
    long long k=0;
    cin>>k;
    vector nums;
    while(k)
    {
        int c=k%10;
        nums.push_back(c);
        k/=10;
    }
    int n=nums.size();
    string str;
    for(int i=0;i

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

第二题 

笔试模拟 day9_第2张图片

思路:

最简单的dp题呀,不用多言了。

代码:

#include 
#include 
using namespace std;

int main() {
    int n=0;
    cin>>n;
    vector dp(n+1,1);
    for(int i=2;i<=n;i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
    }
    cout<

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

---------------------------------------------------我是分割线---------------------------------------------------------------

第三题 

笔试模拟 day9_第3张图片

思路:

这道题还是很简单的,我提供两种思路。

1)排序+模拟

可以先排序,将数组变为有序,然后再判断非零数字之间的关系,统计万能数字“0”,由于数字“0”可以充当任意的数字所以大家再判断非零数字的关系时还要考虑0的存在,只要相差的数字小于0的个数,那么就可以填充。

2)观察顺子的规律

我们可以发现顺子主要有两条规律。

1.数组中不能有重复元素。

2.数组的最大值与最小值不能相差超过四。

满足上述条件的就是顺子。

代码:

//解法一
class Solution {
public:
   
    bool IsContinuous(vector& nums) {
        sort(nums.begin(),nums.end());
        int n=nums.size();
        int zero=0;
        for(int i=0;i& nums) {
        int Max = 0, Min = 14;
        bool hash[14] = {0};
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            if (nums[i] != 0) {
                if (!hash[nums[i]] ) {
                    hash[nums[i]] = true;
                    Max = max(nums[i], Max);
                    Min = min(nums[i], Min);
                } else { // 说明出现重复值
                    return false;
                }
            }

        }
        return Max - Min <= 4;
    }
};

你可能感兴趣的:(Leetcode刷题,笔试,算法,c++,数据结构,笔记)