【发布时间】:2020-09-02 12:18:41
【问题描述】:
您好,我正在尝试使用 brute for 方法解决 Geeks for Geeks 上的一个问题,所以问题陈述是,
给定一个正整数数组。你的任务是找到阵列中的领导者。 注意:如果数组的元素大于或等于其右侧的所有元素,则该元素是领导者。此外,最右边的元素始终是领导者。
输入: 输入的第一行包含一个整数 T,表示测试用例的数量。 T 测试用例的描述如下。 每个测试用例的第一行包含一个整数 N,表示数组的大小。 第二行包含 N 个以空格分隔的整数 A1、A2、...、AN,表示数组的元素。
输出: 打印所有的领导者。
Constraints:
1 <= T <= 100,
1 <= N <= 107,
0 <= Ai <= 107
Example:
Input:
3
6
16 17 4 3 5 2
5
1 2 3 4 0
5
7 4 5 7 3
Output:
17 5 2
4 0
7 7 3
我开发了如下解决方案,
#include <iostream>
using namespace std;
long **leader;
long *cond;
void leader_in_array(long *A,long N,long i) {
long check = 0, count = 0;
for (long j = N - 1; j >= 0 ; j--)
{
if (check <= A[j])
{
check = A[j];
leader[i][count] = check;
count++;
}
}
cond[i] = count;
}
int main() {
long T;
cin >> T;
leader = new long*[T];
cond = new long(T);
for (long i = 0; i < T; i++)
{
long N;
cin >> N;
long *A = new long(N);
leader[i] = new long[N];
for (long j = 0; j < N; j++)
{
cin >> A[j];
}
leader_in_array(A, N, i);
delete [] A;
}
for (long i = 0; i < T; i++)
{
for (long j = cond[i] - 1; j >=0 ; j--)
{
cout << leader[i][j] << " ";
}
cout << endl;
}
delete [] leader;
delete [] cond;
return 0;
}
它适用于测试用例,但是当我尝试在实际用例中提交我的代码时,我收到了错误
分段错误 (SIGSEGV)
我了解它是什么,但无法确定我哪里做错了。
【问题讨论】:
-
int N, A[10];如果N > 10怎么办? -
阅读a good C++ programming book,然后阅读this C++ reference,然后阅读GCC和GDB的文档
标签: c++ arrays algorithm pointers