作者jackjenny (痛苦)
看板Ajax
標題[問題] 尋找陣列中缺少的數字 給P幣5000
時間Sun Apr 17 01:41:13 2016
小弟被人問問題 有點搞混了
看似簡單 我只會javascript一點
會運用到propmt console.log for if
所以在這求程式解 給P幣5000元
Q1:
尋找陣列中缺少的數字: 輸入一個陣列,
該陣列的元素是 1 到 N+1,其中 N 是陣列的數
量。請找出其中缺少的數字。例如輸入 [1,2,4,5,6] 應輸出 3
答案應該會是
console.log( solution([1,2,4]) ); // 3
console.log( solution([1,2,3,5,6]) ); // 4
console.log( solution([1,2,3,4,5]) ); // 6
我的解法是
a.先不管propmt 輸入或輸出 直接改下方的console.log()當輸入
b.
function solution(InputArray)
{
for(var i=0; i <= InputArray.length-1; i++)
{
if (InputArray[i+1]-InputArray[i] == 2)
{
return i+2;
}
}
}
console.log( solution([1,2,4]) ) 答案顯示3
console.log( solution([1,2,3,5,6]) )答案顯示4
console.log( solution([1,2,3,4,5]) ) 答案解示無解
c.
這樣只能求解數列中有缺漏數字,
console.log( solution([1,2,4]) ); // 3
console.log( solution([1,2,3,5,6]) ); // 4
換句話說不能求解 連續數列N元素,再補遞N+1,會沒辦法判斷
console.log( solution([1,2,3,4,5]) ); // 6
d.請問該怎解法 以及 增加輸入陣列解法 輸出答案解法
請大大協助
P幣5000元
感謝
--
中國 香港 澳門 韓國 日本 菲律賓 汶萊 馬來西亞 新加坡 泰國 越南 柬埔寨
緬甸 斯里蘭卡 卡達 約旦 巴勒斯坦 以色列 埃及 澳大利亞 紐西蘭 芬蘭
瑞典 挪威 丹麥 冰島 俄羅斯 愛沙尼亞 拉脫維亞 立陶宛 波蘭 德國 捷克
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.229.158
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Ajax/M.1460828477.A.B0E.html
※ 編輯: jackjenny (114.42.229.158), 04/17/2016 01:41:39
※ 編輯: jackjenny (114.42.229.158), 04/17/2016 01:43:02
1F:推 GoalBased: for(var i=0; i <= input.length; i++) 04/17 01:53
2F:→ GoalBased: {if(input[i] != i+1) return i+1;} 04/17 01:53
3F:→ GoalBased: 沒經過測試0.0 04/17 01:54
4F:推 amaameryou: for(var i=1; i <= InputArray.length+1; i++){ 04/17 02:40
5F:→ amaameryou: if (InputArray.indexOf(i)==-1){console.log(i);} 04/17 02:40
6F:→ amaameryou: } //利用陣列 indexOf 查詢 04/17 02:41
7F:→ amaameryou: //還是要跑1~N+1檢查,當然查到就能break 04/17 02:44
8F:→ amaameryou: //假設數列是正整數 04/17 02:46
9F:→ jackjenny: 請問a大 ==-1 是什意思? ^^ 04/17 04:42
10F:→ jackjenny: 我已經解出來了 利用A大提到indexof()方法 04/17 05:43
11F:→ jackjenny: 不過最後一行 console.log(i)會多一行錯誤@@? 04/17 05:44
12F:→ jackjenny: 改成return(i)就可以了 不知道為什@@? 04/17 05:44
13F:推 johnny9144: 因為用console.log(I) 你的function 沒有回傳值 04/17 10:36
14F:→ johnny9144: 這個時候你變成要console.log()沒有填值 04/17 10:37
15F:→ johnny9144: 所以錯誤 04/17 10:37
16F:→ johnny9144: 也就是說 用a大的方法你直接 呼叫function 就好,不要 04/17 10:39
17F:→ johnny9144: 把function 包在console.log()裡面 04/17 10:39
18F:推 amaameryou: reutrn-1 是沒找到, return >-1 是回傳在陣列中的位置 04/17 12:27
19F:→ amaameryou: 錯誤原因johnny大已經說明, 改為return i是對的 04/17 12:28
21F:→ zxm20243: 算和直接扣掉應該是O(n) 04/17 16:41
22F:→ zxm20243: solution = function(arr) { 04/17 16:41
23F:→ zxm20243: var len = arr.length; 04/17 16:42
24F:→ zxm20243: var sum = arr.reduce((to, val) => to + val, 0); 04/17 16:42
25F:→ zxm20243: var ans = (len + 1) * (len + 2) / 2 - sum; 04/17 16:43
26F:→ zxm20243: return (ans === len + 1) ? null : ans; 04/17 16:43
27F:→ zxm20243: }; 04/17 16:43
28F:推 zxm20243: 不過如果數字是遞增還是一個一個找,找到就break好了 04/17 16:47
29F:→ jackjenny: 謝 會給A大P幣 研究下怎給P幣指令@@ 04/19 01:43
30F:推 abandonONE: if那行,「== 2」換成「!= 2」就可以了 04/20 15:54
31F:→ abandonONE: if那行,「== 2」換成「!= 1」就可以了 04/20 15:54
32F:→ abandonONE: 抱歉我第一行打錯了 囧rz 04/20 15:55