【发布时间】:2021-08-31 05:58:04
【问题描述】:
我正在解决this problem on dynamic array,其中输入的第一行包含两个以空格分隔的整数,n 是要创建的 arr 的大小,q 是查询的数量。
q 个后续行中的每一行都包含一个查询字符串queries[i]。它期望返回int[]:每个类型 2 查询的结果按照它们呈现的顺序。
我尝试如下尝试,我的代码对我来说似乎很好,但它给出了分段错误错误。请帮助我在概念上出错的地方。谢谢。
问题:声明n 空数组的二维数组arr。所有数组都是零索引的。
声明一个整数,最后一个答案,并将其初始化为zero。
queries 有 2 类型,以字符串数组的形式提供给您解析:
查询:1 x y
让idx=((queries[i][1]^last_answer)%n);。
将整数 y 附加到 arr[idx]。
查询:2 x y
让idx=((queries[i][1]^last_answer)%n);。
分配 last_answer=arr[idx][queries[i][2]%(arr[idx].size())] 。
将 last_answer 的新值存储到 answers 数组中。
输入: 2 5
1 0 5
1 1 7
1 0 3
2 1 0
2 1 1
输出:
7
3
#include<iostream>
#include<vector>
using namespace std;
//The function is expected to return an INTEGER_ARRAY,fuction accepts parameter 1) INTEGER n & (2) 2D_INTEGER_ARRAY queries
vector<int> dynamicArray(int n, vector<vector<int>> queries) {
vector<vector<int>>arr;
vector<int>answer;
int last_answer=0;
int q=queries.size();
for(int i=0;i<q;i++){
if(queries[i][0]==1){
int idx=((queries[i][1]^last_answer)%n);
arr[idx].push_back(queries[i][2]);
}
else{
int idx=((queries[i][1]^last_answer)%n);
last_answer=arr[idx][queries[i][2]%(arr[idx].size())];
answer.push_back(last_answer);
}
}
return answer;
}
int main(){
int n,q;
vector<vector<int>>querie;
cin>>n>>q;
for(int i=0;i<q;i++){
cin>>querie[i][0]>>querie[i][1]>>querie[i][2];
}
vector<int>result=dynamicArray(n,querie);
for(size_t i=0;i<result.size();i++){
cout<<result[i];
}
}
【问题讨论】:
-
请提供minimal reproducible example 输入和预期输出,并解释代码应该如何工作。您是否尝试过使用调试器?
-
arr是一个空数组,访问任何索引都是越界的。您正确地将元素推送到答案和arr的(不存在的)元素,但您从未向arr添加元素 -
@alan 先生,是的先生,我尝试了很多调试,并且还添加了确切问题的链接
-
a minimal reproducible example 需要在问题内,而不是依赖外部链接
-
您还应该包括您在使用调试器时获得的信息,例如导致崩溃的行和崩溃的原因。
标签: c++ arrays algorithm vector