我在面試中遇到了以下挑戰,有一些限制。JavaScript挑戰 - Sherlock和數組
Watson給Sherlock一個長度爲N
的數組A
。然後,他要求他確定數組中是否存在一個元素,使得其左側元素的總和等於其右側元素的總和。如果左/右沒有元素,則總和被認爲是零。在形式上,找到一個i
,這樣, A1+A2...A(i−1)=A(i+1)+A(i+2)...AN
。
輸入格式
第一行包含T
,測試用例的數目。對於每個測試用例,第一行包含N
,這是數組A
中元素的數量。每個測試用例的第二行包含空間分隔的整數N
,表示數組A
。
輸出格式
對於每組測試打印YES
如果存在陣列中的元件,以使得在它的左邊的元素的總和等於其右邊的元素的總和;否則打印NO
。
約束
1≤T≤10
1≤N≤10^5
1≤Ai≤2×10^4
1≤i≤N
我已經解決了,但它的失敗在一些測試案例,我想知道我的編碼的缺陷。我花了將近4-5小時,但無法解決它。
我的解決方案 -
function processData(input) {
input = input.split('\n');
var counter=0;
var sum = function(n){
var r=[];
for(var k=0;k<n.length;k++){
if(!isNaN(n[k])) {
if(n[k] >= 1 && n[k] <= (2 * Math.pow(10,4))){
r.push(n[k].trim());
}
}
}
return r.reduce(function(a, b) { return Number(a) + Number(b); }, 0);
}
for(var i=2;i<=input.length;i+=2){
var ret='NO';
if(counter<=10){
input[i] = input[i].split(' ');
if(input[i].length <= Math.pow(10,5) && input[i-1] <= input[i].length && input[i-1] >= 1){
for(var j=0;j<input[i].length;j++){
if(sum(input[i].slice(0,j)) === sum(input[i].slice(j+1,input[i].length))){
ret = 'YES';
break;
}
}
}
}
counter++;
console.log(ret);
};
}
process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
_input += input;
});
process.stdin.on("end", function() {
processData(_input);
});
挑戰鏈接 - https://www.hackerrank.com/challenges/sherlock-and-array
哪裏是你的測試? –
這樣一個可怕的面試問題。 – mkaatman
@丹尼爾·懷特這是採訪,所以我沒有。 –