c++ - Geeks for Geeks 问题中的分段错误 (SIGSEGV)
问题描述
嗨,我试图使用 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)
我了解它是什么,但无法确定我在哪里做错了。
解决方案
该错误已向您指出,但不值得修复。您的尝试过于复杂,似乎有一个更简单、更简单的解决方案:一个循环,以相反的顺序搜索数组,并在每次发现高于所见最高值的值时简单地跟踪迄今为止。而已。
该问题指定值为正,因此我们可以简单地将低水位线初始化为 0,然后运行它。
void all_leaders_in_array(int *arr, size_t size)
{
int highest=0;
while (size > 0)
{
if (arr[--size] > highest)
{
// arr[size] is a "leader" value here,
// do whatever you want with it, print it, etc...
highest=arr[size];
}
}
}
而已。以上将在数组中找到所有所谓的“领导者”,使用一个简单的循环,没有任何复杂的逻辑。根据定义,这会抓取数组中高于所有以下值的所有值。向后搜索数组时,解决方案变得简单得多。只需按倒序跟踪看到的最高值,就可以结束了。
我在问题中找不到任何说明领导者值是否必须按原始顺序显示的内容。上面的代码将以相反的顺序查找/打印值。如果它们必须按其原始出现顺序进行报告,只需将每个值保存在一个单独的数组中,然后以相反的顺序打印该数组。任务完成。
推荐阅读
- python - 在 python 中使用 Datastore(来自 GCP)作为 Celery 的后端结果
- python - 关于海龟图书馆代码
- minizinc - 预先计算 MiniZinc 中关系的传递闭包:Y/N?
- python - 根据过滤器从数据库中查询外键列表
- c# - 无需注册即可使用 Acrobat Interop 程序集
- bdd - 从 application.yml 读取数据库连接详细信息
- java - 降低在给定范围内查找计数的时间复杂度
- c# - 从发布请求到.Net Core 3.1 API 获取“405 Method Not Allowed”
- java - Java 在 for 循环内的 hashmap 中放入一些东西
- python - 使用伽马校正进行图像拼接的奇怪结果