【拼多多面试题】实现1-50有序数组中的全部元素随机输出

本文介绍了在拼多多面试中遇到的一道题目——如何实现1-50有序数组的随机输出。通过从数组末尾开始向前扫描,每次生成一个随机数与当前位置交换来达到乱序目的。代码实现只需五行,并指出此方法与`Collections.shuffle`函数的思想相似。文中提供了`Collections.shuffle`的源码分析,并探讨了不同情况下的实现方式。欢迎分享更好的解题思路。
摘要由CSDN通过智能技术生成

在 pdd 的面试中遇到让手写一个函数实现:1-50有序数组中的元素随机输出。感觉很简单的题目,由于面试官说不可以直接使用 Random ,当时觉得应该就是 Random 的源码实现,但是由于没有看过 Random 的源码,所以一直没想到思路。现在将该题的解题思路记录下来。

  • 思路:

1、从数组的最后一个位置(假设下标是n)开始向前扫描,然后随机生成一个 0 到 n 之间的随机数,假设该随机数是 r1,然后将数组最后一个位置(下标 n)与 r1 位置互换;

2、之后开始扫面下一个数(下标为 n - 1),然后随机生成一个 0 到(n - 1) 之间的随机数。假设该随机数是 r2,然后将数组倒数第二个位置(下标为 n - 1)与 r2 位置互换;

3、然后继续扫面下一个数(下标为 n - 2),就这样一直迭代下去。

在这个迭代过程中,可以保证扫面点左边的数字都是尚未确定位置的,而右边的数字都是已经安排好位置的。如下图所示使用该算法对数组 {1,2,3} 进行乱序:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值