面试题:数组随机排列

今天去面试做了一套题,有个题目是就是数组随机排列。 我脑子里并没有概念,只是因为前几天看javascript高级程序设计3的第五章讲数组的时候讲解的数组排序方法reverse() 和sort()。reverse是颠倒数组中元素的位置并返回颠倒后的数组,按照字符串的Unicode码位点(code point)排序;而js排序是就是用 sort 方法来排序也是按照的是按照字符串的Unicode码位点(code point)排序;sort方法的参数只有一个就是compareFunction,翻译过来就是比较函数。

上图是sort比较规则。

了解完整个sort,回归题目。 数组随机排序,看到随机,我们第一反应就是用Math.random函数,排序用sort,但是该怎么排序?在面试中我一直在思考,然后面试完了我就百度了一下找到了答案。

下面是完整代码

var arr = ["1","2",1,2,6,"sdas","sqqwcm","qywcqkn","david"];
function compare (){
    return Math.random() > 0.5 ? 1 : -1;
}
var newArr = arr.sort(compare);
console.info(newArr);
时间: 2024-10-12 13:54:43

面试题:数组随机排列的相关文章

泛型数组随机排列工具类

前言:最近开发一款简易游戏,要将一个数组中的内容随机排列.考虑到以后可重用性,所以自己写了一款"泛型数组随机排列工具类",现在分享给大家,希望能给大家带来启发.如果有好的方法类,请发给笔者邮箱,大家互相学习,感激不尽. ?源码: import java.lang.reflect.Array; import java.util.Random; /** * 泛型数组随机排列工具类. * * 要求:使用类类型. * * 示例: * * public static void main(Stri

网易2018校招笔试题-数组能不能满足重排列后任意相邻的元素积都是4的倍数

今天看了一下网易最新的校招笔试题: 小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}.牛博士给小易出了一个难题:     对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数.     小易现在需要判断一个数列是否可以重排之后满足牛博士的要求. 代码如下: 1 import java.util.Scanner; 2 3 /** 4 * Created by jy on 2017/9/9. 5

经典面试题-数组中只出现一个的数(1)

[题目]:给你一个数组,只有一个数出现过一次,其他的数字都出现两次.求只出现过一次的那个数. [解析]:这个题算是比较经典的了,在这个题的基础上有很多变种,后续会一一总结. 首先分析这个问题要求的是出现过一次的那个数字,其他的是我们不需要的,我们要想办法消除. 分析其他数字我们发现,他们有一个共同的特点就是出现过两次,从而我们可以想到可以通过异或来处理. 因为异或相同为0,不同为1.两个相同的数字异或为0,同时异或有传递性,可以保证我们想要的那个出现过一次 的数字,通过对所有数字异或可以得到.

经典面试题-数组中出现次数超过一半的数

[题意]:数组中有一个数字出现超过半数以上,找出这个数字. [解析]:一个数字超过半数以上,这是本题仅有的条件,所以,我们要从这个条件入手. 数字超过半数有什么特性呢?首先这个数字肯定是这些数的中位数.所以可以排序,然后找中位数. 但是时间复杂度为排序的O(n*logn),还可以再快吗? 现在有这么一个思路,我们知道,要求的这个数超过半数,那么两个不同的数我们消除,相同的累加, 最后一定能剩下那个超过半数的数字. 具体操作:用一个变量用来存当前剩下的数字,用一个变量做计数器.每次比较数字是否相同

PHP 面试题数组篇[ 整理中 ]

网上找的PHP数组题,准备自己做一遍并且记录下来.不断添加中. 1.写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1. 1 <?php 2 3 function arrsort($first,$length){ 4 5 $arr = array(); 6 for($i=$first;$i<=$length;$i++){ 7 8 $arr[] = $i*2-1; 9 } 10 return $arr; 11 } 12 13 $arr1 = arrsort(1,10); 14 pri

程序典型面试题---数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 解法:位异或运算 思路:将问题简化为除了一个数字外,其他数字都出现两次.将数组的结果异或起来,因为出现两次的数组异或结果为0,所以结果异或的结果即为出现一次的数据. 题设的问题将数组分为两组,每组异或的结果即为要求的只出现一次的一个数字.问题的关键是怎么分组刚好能使得两个只出现一次的两个数字位于不同的组,那些出现两次的数字的两次都在相同的组中. 解法

华为OJ平台试题 —— 数组:字符串反转

字符串反转 代码: /* * 接受一个字符串,然后输出该字符串反转后的字符串. */ #include <stdio.h> #include <string.h> /* * 字符串反转函数 */ char *revstr(char *str, int len) { char *start = str; char *end = str + len - 1; char ch; if (str != NULL) { while (start < end) { ch = *start

.NET面试题(三)

第1讲:面试前期准备 1.了解相关技术职务需要的技术人才                              2.准备一份出色的个人简历 第2讲:面试前期准备                             1. 多渠道获取面试途径                            2.投递简历注意事项                            3. 掌握面试过程…… 第3讲:全面认识.NET框架 1.面试题 介绍CTS.CLS.CLR               

js数组操作-打乱数组

<style> html, body { margin: 0; padding: 0;} div span { display: inline-block; width: 25px; height: 25px; background: red; } </style> <div id="wrap"> <span></span> <span></span> <span></span>