使用C++查找所有元素都大于X的片段数量


在本文中,我们将找到给定序列中所有元素都大于给定数字X的片段或子数组的数量。

我们只能计算一次重叠的片段,并且两个连续的元素或片段不应该分别计数。以下是用此问题描述的基本示例:

Input : arr[ ] = { 9, 6, 7, 11, 5, 7, 8, 10, 3}, X = 7
Output : 3
Explanation : { 9 }, { 11 } and { 8, 10 } are the segments greater than 7

Input : arr[ ] = { 9, 6, 12, 2, 11, 14, 8, 14 }, X = 8
Output : 4
Explanation : { 9 }, { 12 }, { 11, 14 } and { 14 } are the segments greater than 8

寻找解决方案的方法

朴素方法

在这个问题中,我们用0初始化一个变量**state**,开始处理给定的数组,当找到一个大于X的元素时将state更改为1,继续处理元素,当找到小于或等于X的数字时将state更改回0,并且每次state从1变回0时,计数器加1。

示例

#include <bits/stdc++.h>
using namespace std;
int main (){
    int a[] = { 9, 6, 12, 2, 11, 14, 8, 14 };
    int n = sizeof (a) / sizeof (a[0]);
    int X = 8;
    int state = 0;
    int count = 0;
    // traverse the array
    for (int i = 0; i < n; i++){
        // checking whether element is greater than X
        if (a[i] > X){
           state = 1;
        }
        else{
           // if flag is true
           if (state)
               count += 1;
            state = 0;
        }
    }
    // checking for the last segment
    if (state)
        count += 1;
    cout << "Number of segments where all elements are greater than X: " << count;
    return 0;
}

输出

Number of segments where all elements are greater than X: 4

上述程序的解释

在上面的程序中,我们使用state作为开关,当找到大于X的数字时将其设置为1,当找到小于或等于X的数字时将其设置为0,并且每次state从1变回0时,计数器加1。最后,打印存储在计数器中的结果。

结论

在本文中,我们通过设置state为1和0来解决查找所有元素都大于X的片段数量的问题,无论何时找到一个片段。我们可以使用其他编程语言(如C、Java、Python等)编写此程序。

更新于:2021年11月24日

252 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告