[英]equal jump between numbers in two arrays
我想比較兩個 arrays。 其中一個是另一個的子集。 我希望我的 function 返回另一個數組中第一個子集數組的數字之間的最小且相等的間隙。
例如,如果我有
arr1 = 2,1,4,2,8,3
sub= 1,2,3
我希望我的 function 返回 1,因為所有這些數字之間的最小差距是 1。
arr1 = 2,1,5,2,1,2,3
sub= 1,2,3
我希望我的 function 返回 0,因為 arr1 中 1、2、3 之間的最小間隙為 0
這是我正在嘗試做的代碼:我的代碼總是返回 0 你能幫我理解為什么,我該如何解決這個問題。
int gap(int* arr, int* sub, int sizeArr, int sizeSub)
{
int index = 0; int gap = 0; bool flag = true;
int i = -1;
for (int jump = 1; jump < sizeArr / sizeSub; jump++)
{
index = 0;
for (i = i +1; i < sizeArr; i++)
{
if (sub[index] == arr[i])
{
for (int j = i + jump, index = 1; j < sizeArr; j = j + jump, index++)
{
if (arr[j] != sub[index]) { flag = false; break; }
else if (arr[j] == sub[index] && index == sizeSub) { flag = true; break; }
}
}
if (!flag) { break; }
else { gap = jump; break; }
}
}
return gap;
}
您最初將 gap 設為0
但我認為更適合不存儲gap
並從0
開始迭代jump
。 並在你發現它適合后立即返回跳躍。
我也認為以你這樣的方式存儲索引是個壞主意,因為你的代碼返回錯誤的答案
int a[] = { 2,1,4,4,2,8,5,3 };
int s[] = { 1,2,3 };
我認為你應該盡快聲明變量,否則會有不良的副作用。
所以你的代碼可以重寫為
int gap(int *arr, int *sub, int sizeArr, int sizeSub)
{
for (int jump = 0; 1 + (jump + 1) * (sizeSub - 1) <= sizeArr; jump++) {
for (int start_index = 0; start_index + (jump + 1) * (sizeSub - 1) < sizeArr; start_index++) {
bool flag = true;
for (int index = 0; index < sizeSub; ++index) {
if (arr[start_index + index * (jump + 1)] != sub[index]) {
flag = false;
break;
}
}
if (flag) {
return jump;
}
}
}
return -1; //or some value that indicate that there is no answer
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.