一个随机排布的面试题(洗牌算法?)
来源:互联网 发布:西门子840d编程手册书 编辑:程序博客网 时间:2024/05/18 07:40
去某公司面试遇到一个这样的题:“班里有62个学生,学号分别为1-62,新学期随机排座位,要求学号相邻的不能坐在一起”
个人解读:一个数组有1-62个数字,要求随机排序,数字相邻的不能挨在一起。
肯定是遍历啊,遍历一遍可能不会安排完数组里所有的值,所以需要递归调用。为了避免安排完最后剩下两个数61,62所以采取从头尾两次插入的方法。
var arr =new Array(62).fill(0).map((_,k)=>k+1); function randomSort(arr,target){ if(!Array.isArray(arr) || arr.length==0) return target; for(var i=arr.length;i>0;i--){ var index = Math.floor(Math.random()*i); if(target.length>0){ //判断最后一个是不是跟随机取出来的相邻 if(target[target.length-1]+1!=arr[index] && target[target.length-1]-1!=arr[index]){ target.push(arr[index]); arr.splice(index,1) }else if(target[0]+1!=arr[index] && target[0]-1!=arr[index]){ //再判断第一个是不是跟他相邻 target.unshift(arr[index]) arr.splice(index,1) } }else{ target.push(arr[index]) arr.splice(index,1) } } return target.concat(randomSort(arr,target)); } console.log(randomSort(arr,[])) //上边那种写法
改变一下写法,调用的时候有点难看
var arr =new Array(62).fill(0).map((_,k)=>k+1); function randomSort(arr){ if(!Array.isArray(arr) || arr.length==0) return []; var target = []; for(var i=arr.length;i>0;i--){ var index = Math.floor(Math.random()*i); if(target.length>0){ //判断最后一个是不是跟随机取出来的相邻 if(target[target.length-1]+1!=arr[index] && target[target.length-1]-1!=arr[index]){ target.push(arr[index]); arr.splice(index,1) }else if(target[0]+1!=arr[index] && target[0]-1!=arr[index]){ //再判断第一个是不是跟他相邻 target.unshift(arr[index]) arr.splice(index,1) } }else{ target.push(arr[index]) arr.splice(index,1) } } return target.concat(randomSort(arr)); } console.log(randomSort(arr))
不知道有没有bug,应该是没有
阅读全文
0 0
- 一个随机排布的面试题(洗牌算法?)
- 设计一个随机洗牌的算法
- 浅谈洗牌算法(面试题)
- 浅谈洗牌算法(面试题)
- 洗牌算法:随机打乱一个数组的顺序
- 洗牌算法:随机打乱一个数组的顺序
- 洗牌算法:随机打乱一个数组的顺序
- 九章算法面试题38 洗牌的技巧
- 一天一个算法: 随机洗牌算法
- 经典面试题之 —— 洗牌算法(打乱)
- 洗牌算法:随机打乱一个数组
- 洗牌的一个算法
- [经典面试题]完美洗牌算法
- 百度面试题之非随机过程洗牌
- Craking the coding interview 面试题:完美随机洗牌
- JavaScript随机打乱数组元素的位置(洗牌算法)
- 洗牌随机算法的一种Java实现
- [每日练习]随机洗牌算法(Java)
- 【java学习笔记】接口VS抽象类
- spring mvc+Mybatis整合shiro 第六章 关于更新缓存权限的几个要点
- fstream ,ifstream,ofstream的用法详解
- MAC系统如何显示隐藏文件
- 华丽的分割线
- 一个随机排布的面试题(洗牌算法?)
- Java反射的理解
- LVS实现负载均衡
- 自定义Linearlayout
- scala 关键字seal
- 两个div并列
- Memcache、Redis和MongoDB的区别
- TP3.2单车泊位管理系统 车位分时数据统计思路
- java学习笔记(三)