题解 | #简洁优雅高效O(n)#

无重复数组

https://www.nowcoder.com/practice/d2fa3632268b41df9bc417b74802ad8c

1. 时间复杂度为O(n)
2. 生成range(start, end)的数组
3. 随机数生成函数
4. 将随机数选中的位置与数组末尾交换,提高效率 。交换操作时间复杂度为O(1)
[arr[arr.length - 1 - j], arr[selected]] = [arr[selected], arr[arr.length - 1 - j]];

const _getUniqueNums = (start, end, n) => {
    // 补全代码
    const arr = Array.from(new Array(end - start + 1), (v, i) => start + i);
    const randIndex = (max) => Math.floor(Math.random() * max);
    const ans = [];
    for (let j = 0; j < n; j++) {
        let selected = randIndex(arr.length - j);
        ans.push(arr[selected]);
        [arr[arr.length - 1 - j], arr[selected]] = [arr[selected], arr[arr.length - 1 - j]];
    }
    return ans;
}


全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 10:52
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务