1.二维数组的全排列组合
如输入[[1,2],[3,4],[5,6]]
输出:
[ 1, 3, 5 ]
[ 1, 3, 6 ]
[ 1, 4, 5 ]
[ 1, 4, 6 ]
[ 2, 3, 5 ]
[ 2, 3, 6 ]
[ 2, 4, 5 ]
[ 2, 4, 6 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function printArr(arr,n,res){ for(var i = 0; i<arr[i].length;i++){ if(n == 0){ res = [] } if(n<arr.length){ var _res = res.slice() _res.push(arr[n][i]) if(n == arr.length-1){ console.log(_res) }else{ printArr(arr,n+1,_res) } } } }
var arr = [[1,2],[3,4],[5,6]] printArr(arr,0);
|
2.打印青蛙跳台阶的所有方式
注意 不是求方式的个数,而是打印每种情况 台阶数为10,每次跳1格或两格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function step(n,res){ if(n==0){ res=[] } var i=1 while(i<3){ if(n+i<=10){ var _res = res.slice() _res.push(i) if(n+i == 10) { console.log(_res) }else{ step(n+i, _res) } } i++ } } step(0)
|
3.统计一个字符串出现最多的字母
输入 : afjghdfraaaasdenas
输出:a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function findMaxDuplicateChar(str) { if (str.length == 1) { return str; } var charObj = {}; for (var i = 0; i < str.length; i++) { if (!charObj[str.charAt(i)]) { charObj[str.charAt(i)] = 1; } else { charObj[str.charAt(i)] += 1; } } var maxChar = '', maxValue = 1; for (var k in charObj) { if (charObj[k] >= maxValue) { maxChar = k; maxValue = charObj[k]; } } return maxChar; }
findMaxDuplicateChar('afjghdfraaaasdenas')
|
排序算法
排序算法有很多种,而经典的和用的比较多的就是冒泡和快排,动画演示
4.冒泡排序
输入 : [33,1,4,23,12,43,54,34]
输出:[1, 4, 12, 23, 33, 34, 43, 54]
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function bubble(arr) { for(var i= 0; i< arr.length -1; i++) { for(var j= i; j< arr.length -1; j++) { if(arr[j] > arr[j+1]) { var tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } return arr; }
console.log(bubble([33, 1, 4, 23, 12, 43, 54, 34]));
|
5.快速排序
输入 : [33,1,4,23,12,43,54,34]
输出:[1, 4, 12, 23, 33, 34, 43, 54]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function quick(arr) { if (arr.length <= 1) { return arr; } var middleIndex = Math.floor(arr.length / 2); var middle = arr.splice(middleIndex, 1)[0]; var leftArr = [], rightArr = []; for (var i = 0; i < arr.length; i++) { if (arr[i] < middle) { leftArr.push(arr[i]); } else { rightArr.push(arr[i]); } } return quick(leftArr).concat([middle], quick(rightArr)); }
console.log(quick([33,1,4,23,12,43,54,34]));
|
6.生成指定范围内的随机数
输入 : 5,10
输出:5,7,9,8,6,10……
1 2 3 4 5 6 7
| function randomNum(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
setInterval(function(){ console.log(randomNum(5, 10)); },1000)
|
7.利用一个for循环找出一个数组中第二大的数
输入 : [1, 3, 6, 4, 8, 23, 54, 11]
输出:23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function getSecond(arr) { var largestNum = arr[0] > arr[1]? arr[0] : arr[1]; var secondNum = arr[0] <= arr[1]? arr[0] : arr[1]; for(var i =2; i< arr.length; i++) { if(arr[i] > largestNum) { secondNum = largestNum; largestNum = arr[i]; }else if(arr[i] > secondNum) { secondNum = arr[i]; } } return secondNum; }
console.log(getSecond([1, 3, 6, 4, 8, 23, 54, 11]));
|