Q字符串中出现最多的字母?
function findMax(str) {
if(str.length == 1) {
return str;
}
let charObj = {};
for(let i = 0; i < str.length; i ++) {
if(!charObj[str.charAt(i)]) {
charObj[str.charAt(i)] = 1;
} else {
charObj[str.charAt(i)] += 1;
}
}
let maxChar = '';
maxValue = 1;
for(var k in charObj) {
if(charObj[k] >= maxValue) {
maxChar = k;
maxValue = charObj[k];
}
}
return maxChar;
}
module.exports = findMax
Q冒泡排序
冒泡排序就是依次比较大小,小的大的进行位置上的交换。
function bubbleSort(arr) {
for(let i = 0; i < arr.length - 1; i ++) {
for(let j = i + 1; j < arr.length; j ++) {
if(arr[i] > arr[j]) {
let tem = arr[i];
arr[i] = arr[j];
arr[j] = tem;
}
}
}
return arr;
}
module.exports = bubbleSort;
# Q快速排序
快排核心思想是 :
选定一个基准x,将比x小的值放到左边,比x大的值放到右边。
const partition = (arr, left, right) => {
let x = arr[left];
let i = left;
let j = right;
while(i < j) {
//先从前往后找小的,没找的的话一直继续
while( i < j && arr[j] > x) {
j --;
}
//找到了,将值填入坑里面,a[j]又变成了坑
if(i < j) {
a[i] = a[j];
}
//然后从前往后找大的,没找到继续找。
while(i < j && arr[i] < x) {
i ++;
}
//找到了,将值填入之前的坑里。
if(i < j) {
a[j] = a[i]
}
}
//将基准值填入坑
a[i] = x;
return i;
}
const quickSort = (arr,left,right) => {
const length = arr.length;
const start = left || 0;
const end = right !== undefined ? right : length - 1;
if(start < end) {
const index = partition(arr, start, end;)
quickSort(arr, start, index - 1);//调整基准值左边
quickSort(arr,index + 1,end); //调整基准值右边
}
return arr;
}
使用:
const newArr = [2, 3, 1, 4, 6, 5, 9, 8, 7];
// 测试下
let result = quickSort(newArr);
console.log(result); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
未完待续。。。
快排算法2
算法参考某个元素值,将小于它的值放到左数组中,大于它的值放在右数组中。然后进行递归进行左右数组的操作。返回合并的数组就是已经排好顺序的数组了。
function quickSort(arr) {
if(arr.length < = 1) {
return arr;
}
let leftArr = [];
let rightArr = [];
let q = arr[0];
for(let i = 1; i < arr.length; i ++) {
if(arr[i] > q) {
rightArr.push(arr[i])
} else {
leftArr.push(arr[i])
}
}
return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
}
module.exports = quickSort;
扫码可以领10g前端资料,也可回复加群,加入交流群。
另有github每日更新精选面试题欢迎star github.com/qdleader/qd…