当前位置: 首页 > 知识库问答 >
问题:

给定大小为N的数组S,检查是否可以将序列拆分为两个序列

禄星腾
2023-03-14

给定一个数组s大小n,请检查是否可以将序列拆分为两个序列-s1到sis+1到sn,以便第一个序列严格减少,第二个序列严格增加。
输入格式
第一行包含单个整数n表示输入的大小。
下一个n行包含单个整数,每个行表示数组的元素s

约束
0 ,顺序 s的每个数字为 >0<10000000

输出格式
打印布尔输出-“true”“false”定义序列是增加还是减少。

示例输入
5 1 2 3 4 5

示例输出
true

解释
仔细阅读条件以判断哪些序列可能是有效的。不要使用数组或列表。
我的代码得了77.78/100分,我无法找出错误,有人能帮我吗。

#include<iostream>
using namespace std;
int main() {
    int n;
    long long int p,c;

    cin >> n;
    cin >> p;
    bool dec=true;
    int a=0;
    if (n<=0 || n==1) {
        a=1;
    }
    for (int i=1;i<n;i++) {
        cin >> c;
        if (p==c) {
            a=1;
        }
        else if (p<c) {
            if (dec) {
                dec=false;
            }
            else {
                dec=false;
                a=0;
            }
        }
        else if (c > p) {
            if (dec) {
                a=0;
            }
            else {
                a=1;
                dec=false;
            }
        }

    }
    if(a==0){
        cout<<"true";
    }
    else {
        cout<<"false";
    }
    return 0;
}

共有1个答案

都阳
2023-03-14

我在一些测试用例上测试了您的代码,

n = 2
1 1

它的答案应该是真的,因为它可以分解成{1},{1},而且由于单个元素既增加又减少,所以答案是真的。

下面是我的代码解释:我的整个概念是基于我们需要检查给定的序列是否可以在两个子序列中准确地中断。所以我保留了一个变量Seq_no来跟踪,所以如果在代码的末尾,如果Seq_no值不超过2,也因为有可能一个序列完全严格地递减,所以在这种情况下,如果n不等于1,那么答案是真的。

#include <iostream>
#include <limits.h>
using namespace std;


int main() 
{

    int n, curr, prev = INT_MAX, Seq_no = 1;

    int i;

    cin >> n;

    for(i = 0; i < n; i++)
    {
        cin >> curr;

        if(Seq_no == 1) // for stricly decreasing
        {
            if(prev <= curr)
            {
                Seq_no++;
            }

        }
        else  // for stricly decreasing
        {
            if(prev >= curr)
            {
                Seq_no++;
                break;
            }

        }
        prev = curr;
    }

    if(Seq_no == 2 || (Seq_no == 1 && n != 1)) 
        cout << "true\n";
    else 
        cout << "false\n";

    return 0;
}

如果我解决了你的问题。接受答案。

 类似资料:
  • 问题内容: 想象一下,我有一个这样的JS数组: 我想要的是将该数组拆分为N个较小的数组。例如: 对于Python,我有这个: 对于JS,我可以提出的最佳解决方案是递归函数,但我不喜欢它,因为它既复杂又丑陋。这个内部函数返回一个像这样的数组[1,2,3,null,4,5,6,null,7,8],然后我必须再次循环并手动拆分它。(我的第一次尝试是返回此:[1、2、3,[4、5、6,[7、8、9]]],

  • 问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。

  • 本文向大家介绍编写Golang程序以检查给定数字是否为质数,包括了编写Golang程序以检查给定数字是否为质数的使用技巧和注意事项,需要的朋友参考一下 定义: 一个数字是大于2且只能被其自身和1整除。 示例:素 数是2、3、5、7、11、13、113、119等。 解决这个问题的方法 步骤1:找到给定数字的平方根sq_root =√num 步骤2:如果给定数字可被[2,sq_root]所属的数字整除

  • 我正在通过CodingBat解决以下问题: 给定一个整数数组,是否可以将整数分成两组,使一组的和为10的倍数,另一组的和为奇数。每个int必须在一个组或另一个组中。编写一个递归助手方法,该方法接受您喜欢的任何参数,并从splitOdd10()对递归助手进行初始调用。(不需要循环。) 我在SO上找到了一篇文章,讨论了一个类似的话题:是否有可能将一个数组分成两个具有相等乘积的数组,并尝试通过类比编写代

  • 如何使用流将Java列表拆分为Java大小为的较小列表? 在JavaScript中,我会使用函数并执行如下操作: 我试图用Java流来实现这一点,但我似乎不知道如何让它允许我使用数组列表

  • 我想用Java中所有可能的方法将一个列表拆分为给定数量的n个子列表。 例如,其中n=3将包括以下列表(但不是一个完整的解决方案-完成将需要更多的空间): 等 我适应了另一个类似的问题的解决方案(以所有可能的方式将列表分割成两个子列表),但它只适用于创建2个子列表的列表,我正在努力掌握如何实现灵活而不是硬编码的子列表数量。 这是我的密码: 我需要创建n个数的EGroup对象添加到,而不是硬编码的2,