這是從Codility三角問題:三角:確定是否陣列包括三角形三重峯(Codility)
一個零索引的數組A由N個整數的中給出。
甲三重峯(P,Q,R)是三角形的,如果0≤P < Q <ř< N和:A [P] + A [Q]> A [R],
A [Q] + A [P],A [P],
A [R] + A [P]> A [Q]。寫功能:
int solution(vector<int> &A);
如果存在用於此陣列的三角形三元組,並返回0,否則 ,給定的零索引的數組A由N個整數的,返回1 。例如,給定數組A,使得:
A [0] = 10,A [1] = 2,A [2] = 5,A [3] = 1,A [4] = 8, A [5] = 20 三重峯(0,2,4)是三角形的,該函數應該返回1.鑑於陣列A使得:
A [0] = 10,A [1] = 50, A [2] = 5,A [3] = 1
函數應該返回0假設:
N是RA內的整數nge [0..100,000];
數組A的每個元素是範圍在 [-2,147,483,648..2,147,483,647]範圍內的整數。
這裏是我的C++解決方案:
int solution(vector<int> &A) {
if(A.size()<3) return 0;
sort(A.begin(), A.end());
for(int i=0; i<A.size()-2; i++){
//if(A[i] = A[i+1] = A[i+2]) return 1;
if(A[i]+A[i+1]>A[i+2] && A[i+1]+A[i+2]>A[i] && A[i+2]+A[i]>A[i+1]){
return 1;
}
}
return 0;
}
我已經簽了意見,並有所有的解決方案似乎與我相似。
但是,雖然其他人聲稱已獲得100%,但我只得到93%的分數。
我得到了所有的測試情況下,正確,除了一個:
extreme_arith_overflow1
溢出測試,3個MAXINTs
我認爲這種情況有一些像這樣的輸入:
[2147483647,2147483647, 2147483647]
所以我把這個添加到自定義測試用例中,當它顯然應該是1時,答案變成了0.
我也試過[19億,19億,19億],得到的答覆仍然是0。
然而,[10億,10億,10億]是我在爲什麼這個結果1.
任何人都可以線索的正確答案發生?
非常感謝。
聽起來像正常的整數溢出。 https://en.wikipedia.org/wiki/Integer_overflow – Welbog
使長向量的int int –
向量只是查了一下:在這個例子中int是32位,long int保證32位,在Unix上可以是64,而long long int保證是64,所以這就是在這種情況下使用long long long的原因。謝謝你的幫助! – toshism