题解 | #杨辉三角的变形#

杨辉三角的变形

http://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43

以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。

求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。数据范围: 。本题有多组输入数据。

输入描述:

输入一个int整数

输出描述:

输出返回的int值

示例
输入:4
           2
输出:3
          -1

方法一

思路分析

方法一的思路为暴力求解,直接构造数组求解杨辉三角的数组的元素,然后遍历最后一行求解第一个出现偶数的位置。根据题目要求第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0),因此构造$arr[n,2*n-1]$的二维数组。构造方法如下:
  • 初始化数组元素为0
  • 三角形三个顶点位置的元素均为1
  • 每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和,如果这个数不存在即为0
按照上面的办法可以构造得到完整的杨辉三角数组。之后遍历数组的最后一行,找到第一个为偶数的元素位置,如果没有输出-1

核心代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int count=0;
    while(cin>>count)
    {
        if(count<=2) 
        {
            cout<<-1<<endl;
            continue;
        }
        vector<vector<int>>arr(count,vector<int>(2*count-1,0));
        arr[0][count-1]=1;//三角形三个顶点的元素为1
        arr[count-1][0]=1;
        arr[count-1][2*count-2]=1;
        for(int i=1;i<count;i++)
        {
            for(int j=1;j<2*count-2;j++)
                arr[i][j]=arr[i-1][j]+arr[i-1][j-1]+arr[i-1][j+1];//三个数之和
        }
        
        for(int i=0;i<2*count-1;i++)
        {
            if(arr[count-1][i]!=0 && (arr[count-1][i]%2==0))
           {
               cout<<i+1<<endl;
               break;
           }
        }
    }
}
复杂度分析
  • 时间复杂度:时间花费在数组的构造,时间复杂度为$O(n^2)$,之后需要在数组最后一行寻找第一个偶数的位置,时间复杂度为$O(n)$,总的时间复杂度为$O(n^2)$
  • 空间复杂度:需要构造额外的存储空间数组,空间复杂度为$O(n^2)$

方法二

思路分析

本题除了使用暴力法构造数组之外,也可以根据规律进行求解,可以看到第一行和第二行是没有偶数出现的,因此直接输出-1。之后的每一行中偶数元素的出现也是带有规律的。在分析的过程中在找偶数行的过程中需要多求解几行才可以找到规律。

图解


核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int count=0;
    while(cin>>count)
    {
        if(count<3) cout<<-1<<endl;
        else if(count%2!=0) cout<<2<<endl;//奇数行
        else if(count%2==0&&count%4==0) cout<<3<<endl;//偶数行分为两类
        else cout<<4<<endl;
    }
    return 0;
}

复杂度分析

  • 时间复杂度:时间复杂度为$O(1)$
  • 空间复杂度:空间复杂度为$O(1)$


全部评论

相关推荐

03-15 10:59
已编辑
美团_后端开发(实习员工)
爱写代码的菜code...:哎,自己当时拿到字节offer的时候也在感叹终于拿到了,自己当时最想去的企业就是字节,结果还是阴差阳错去了鹅厂。祝uu一切顺利!!!
点赞 评论 收藏
分享
暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4471次浏览 48人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16917次浏览 137人参与
# 米连集团26产品管培生项目 #
7384次浏览 226人参与
# 沪漂/北漂你觉得哪个更苦? #
1616次浏览 41人参与
# 你的实习产出是真实的还是包装的? #
3230次浏览 54人参与
# 春招至今,你的战绩如何? #
16021次浏览 146人参与
# 巨人网络春招 #
11540次浏览 228人参与
# HR最不可信的一句话是__ #
1107次浏览 32人参与
# AI面会问哪些问题? #
971次浏览 24人参与
# 你做过最难的笔试是哪家公司 #
1306次浏览 23人参与
# AI时代,哪个岗位还有“活路” #
2930次浏览 53人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152945次浏览 889人参与
# 简历第一个项目做什么 #
32180次浏览 363人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8029次浏览 43人参与
# XX请雇我工作 #
51164次浏览 171人参与
# 简历中的项目经历要怎么写? #
311119次浏览 4271人参与
# 投格力的你,拿到offer了吗? #
178382次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77008次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
64819次浏览 891人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187635次浏览 1123人参与
# 你怎么看待AI面试 #
180882次浏览 1318人参与
# 正在春招的你,也参与了去年秋招吗? #
364407次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务