我正在嘗試撰寫一個函式,以便它為我n提供陣列中最長的連續遞增或相等序列,例如{ 1, 2, 3, 4, 4, 3, 2, 1 }將給出n = 5.
但是,當我嘗試使用時{ 7, 7 },我的代碼回傳0。我不確定我是否if (array[i] >= array[i-1])正確。先感謝您!
int longest(int array[], unsigned n) {
//assign longest sequence
int k = 0;
int running_k = 1;
for (int i = 0; i < n; i) {
if (array[i] > array[i - 1]) {
running_k;
} else
if (array[i] == array[i - 1]) {
running_k = running_k 1;
} else {
if (running_k > k) {
k = running_k;
}
running_k = 1;
}
}
return k;
}
uj5u.com熱心網友回復:
有多個問題:
引數
n、回傳值和區域變數應該有型別size_t。你不應該讀
array[i - 1]wheniis0,所以初始值不i應該是0,但是1。回圈內的 2 個測驗應組合為:
if (array[i] >= array[i - 1])您應該檢查是否
running_k > k在回圈結束時,以防最長的運行序列在陣列的末尾,對于{ 7, 7 }.你應該特殊情況的長度陣列
1和0.
這是修改后的版本:
size_t longest(const int *array, size_t n) {
if (n <= 1)
return n;
size_t k = 0;
size_t running_k = 1;
for (size_t i = 1; i < n; i ) {
if (array[i] >= array[i - 1]) {
running_k;
} else {
if (k < running_k) {
k = running_k;
}
running_k = 1;
}
}
if (k < running_k) {
k = running_k;
}
return k;
}
uj5u.com熱心網友回復:
如果最長序列的長度為 1,您的代碼將回傳 0。
int longest(int array[], unsigned n) {
//assign longest sequence
int k = 0;
int running_k = 1;
for (int i = 1; i < n; i){
if (array[i] >= array[i-1] ){
running_k;
}
else {
if (running_k > k){
k = running_k;
}
running_k = 1;
}
}
return k;
}
uj5u.com熱心網友回復:
這是您所尋求的縮短版本。我調整了一些型別以保持一致性。size_t是 unsigned int 或 unsigned long 的 typedef。您可能會根據需要將其更改回int或更改unsigned。
size_t longest(int* array, size_t n) {
size_t length=1, best=1;
if (n <= 1) {
return n;
}
for (size_t i = 1; i < n; i ) {
length = (array[i] >= array[i-1]) ? (length 1) : 1;
best = (length > best) ? length : best;
}
return best;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516696.html
標籤:C
下一篇:char陣列的長度
