作者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/cn.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