[問題] 尋找陣列中缺少的數字 給P幣5000

看板Ajax作者 (痛苦)時間8年前 (2016/04/17 01:41), 8年前編輯推噓6(6026)
留言32則, 6人參與, 最新討論串1/1
小弟被人問問題 有點搞混了 看似簡單 我只會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://www.ptt.cc/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

04/17 01:53, , 1F
for(var i=0; i <= input.length; i++)
04/17 01:53, 1F

04/17 01:53, , 2F
{if(input[i] != i+1) return i+1;}
04/17 01:53, 2F

04/17 01:54, , 3F
沒經過測試0.0
04/17 01:54, 3F

04/17 02:40, , 4F
for(var i=1; i <= InputArray.length+1; i++){
04/17 02:40, 4F

04/17 02:40, , 5F
if (InputArray.indexOf(i)==-1){console.log(i);}
04/17 02:40, 5F

04/17 02:41, , 6F
} //利用陣列 indexOf 查詢
04/17 02:41, 6F

04/17 02:44, , 7F
//還是要跑1~N+1檢查,當然查到就能break
04/17 02:44, 7F

04/17 02:46, , 8F
//假設數列是正整數
04/17 02:46, 8F

04/17 04:42, , 9F
請問a大 ==-1 是什意思? ^^
04/17 04:42, 9F

04/17 05:43, , 10F
我已經解出來了 利用A大提到indexof()方法
04/17 05:43, 10F

04/17 05:44, , 11F
不過最後一行 console.log(i)會多一行錯誤@@?
04/17 05:44, 11F

04/17 05:44, , 12F
改成return(i)就可以了 不知道為什@@?
04/17 05:44, 12F

04/17 10:36, , 13F
因為用console.log(I) 你的function 沒有回傳值
04/17 10:36, 13F

04/17 10:37, , 14F
這個時候你變成要console.log()沒有填值
04/17 10:37, 14F

04/17 10:37, , 15F
所以錯誤
04/17 10:37, 15F

04/17 10:39, , 16F
也就是說 用a大的方法你直接 呼叫function 就好,不要
04/17 10:39, 16F

04/17 10:39, , 17F
把function 包在console.log()裡面
04/17 10:39, 17F

04/17 12:27, , 18F
reutrn-1 是沒找到, return >-1 是回傳在陣列中的位置
04/17 12:27, 18F

04/17 12:28, , 19F
錯誤原因johnny大已經說明, 改為return i是對的
04/17 12:28, 19F

04/17 12:30, , 20F
https://goo.gl/Kg9Qt array indexOf 說明
04/17 12:30, 20F

04/17 16:41, , 21F
算和直接扣掉應該是O(n)
04/17 16:41, 21F

04/17 16:41, , 22F
solution = function(arr) {
04/17 16:41, 22F

04/17 16:42, , 23F
var len = arr.length;
04/17 16:42, 23F

04/17 16:42, , 24F
var sum = arr.reduce((to, val) => to + val, 0);
04/17 16:42, 24F

04/17 16:43, , 25F
var ans = (len + 1) * (len + 2) / 2 - sum;
04/17 16:43, 25F

04/17 16:43, , 26F
return (ans === len + 1) ? null : ans;
04/17 16:43, 26F

04/17 16:43, , 27F
};
04/17 16:43, 27F

04/17 16:47, , 28F
不過如果數字是遞增還是一個一個找,找到就break好了
04/17 16:47, 28F

04/19 01:43, , 29F
謝 會給A大P幣 研究下怎給P幣指令@@
04/19 01:43, 29F

04/20 15:54, , 30F
if那行,「== 2」換成「!= 2」就可以了
04/20 15:54, 30F

04/20 15:54, , 31F
if那行,「== 2」換成「!= 1」就可以了
04/20 15:54, 31F

04/20 15:55, , 32F
抱歉我第一行打錯了 囧rz
04/20 15:55, 32F
文章代碼(AID): #1N4daziE (Ajax)
文章代碼(AID): #1N4daziE (Ajax)