陣列中最長的區間,滿足該區間內的數排序後是連續的。

2021-06-14 21:01:24 字數 1011 閱讀 6042

陣列中最長的區間,滿足該區間內的數排序後是連續的。比如,[23, 4,1,3,2,9,8,24] 4,1,3,2 是最長區間,是連在一起的。[23, 1,3,2,9,4,8,24] 就只能返回1,2,3了。

這裡考慮到陣列沒有重複的,如果數有重複的話,目前還沒有想到好的方法。

應該有更好的演算法,救大神指教

從x0開始,找length=|x0-x1|+1內的max和min,length大於數列長度則否定x0,再從x1向後開始找;1_如果max-min+1=length,則區間連續,記錄length,繼續向後新增乙個元素,判斷是否為max+1或min-1,若是,則length++,繼續向後並更新max或min,直到否或數列尾,若否,則更新max,或者是min,繼續在x1後開始找。

#include "stdafx.h"

#include

using namespace std;

// 陣列中最長的區間,滿足該區間內的數排序後是連續的。比如,

//     [23, 4,1,3,2,9,8,24] 4,1,3,2 是最長區間,是連在一起的。

//     [23, 1,3,2,9,4,8,24] 就只能返回1,2,3了。

void cal(int a, int length)

else if (a[j] == maxa + 1)

else

break;}}

else

++j;

}if (lengthtemp != 0)

if (i + lengthtemp > length)

break;

i = i + lengthtemp;

lengthtemp = 0;

}else

++i;

}if (begin != -1 && end != -1)

}int _tmain(int argc, _tchar* argv)

;cal(a, 8);

system("pause");

return 0;

}

在乙個給定範圍的區間內找到該區間所有的質數(素數)

剛開始我寫這個 是想用乙個簡單的方法,但是能力有限,只能將這個比較普通的方法呈現出來了。首先我們先編寫一些前期準備的 如下 我的目的是先建立兩個集合,首先n集合先空著,將閉區間 x,y 的所有數都放到a集合裡備用。x,y eval input 請輸入乙個區間 閉區間 如 x,y n set a se...

區間內的真素數

時間限制 1000 ms 記憶體限制 65536 kb 找出正整數m和n之間 n不小於m 的所有真素數。真素數的定義 如果乙個正整數p為素數,且其反序也為素數,那麼p就為真素數。例如,11,13均為真素數,因為11的反序還是為11,13的反序為31也為素數。輸入兩個數m和n,空格間隔,1 m n 1...

區間內的真素數

描述 找出正整數 m 和 n 之間 n 不小於 m 的所有真素數。真素數的定義 如果乙個正整數 p 為素數,且其反序也為素數,那麼 p 就為真素數。例如,11,13 均為真素數,因為11的反序還是為11,13 的反序為 31 也為素數。輸入輸入兩個數 m 和 n,空格間隔,1 m n 100000。...