陣列中最長的區間,滿足該區間內的數排序後是連續的。比如,[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。...