每天努力进步一点点。
04.26
快速排序
还没开始学习递归,尽力的理解了
var arr = [1, 4, 3, 8, 9, 6, 2, 10, 20, 5]
//left和right递归调用quickSort函数
function quickSort(newArr) {
if (newArr.length <= 1) {
return newArr
}
var left = []
var right = []
var current = newArr.splice(0, 1)
for (var i = 0; i < newArr.length; i++) {
if (current < newArr[i]) {
right.push(newArr[i])
} else if (current > newArr[i]) {
left.push(newArr[i])
}
}
return quickSort(left).concat(current, quickSort(right))
}
console.log(quickSort(arr))
04.27
翻转字符串
//也可以用它来判断回文
function reverseStr(oldStr) {
var newStr = ''
for (var i = oldStr.length - 1; i >= 0; i--) {
newStr = newStr + oldStr[i]
}
return newStr
}
console.log(reverseStr('afdcg'))
查找出现次数最多的字符
function countStr(str) {
var obj = {}
for (const i of str) {
if (obj[i]) {
obj[i] = obj[i] + 1
} else {
obj[i] = 1
}
}
var max = 0
for (const key in obj) {
console.log(key)
if (obj[key] > max) {
max = obj[key]
}
}
console.log(max)
for (const key in obj) {
if (obj[key] === max) {
console.log('出现最多的是' + key + ',出现' + max + '次')
}
}
}
countStr('abcdaaacc')
回文数
function palindromic(str) {
if (str.split('').reverse().join('') === str) {
console.log(str + '是回文')
}
}
palindromic('aabbccbbaa')
数组查重
function repeatChecking(arr) {
var newArr = []
var obj = {}
for (var i of arr) {
if (obj[i]) {
newArr.push(i)
} else if (!obj[i]) {
obj[i] = 1
}
}
console.log(newArr)
}
var arr1 = ['a', 'c', 'a', 1, 2, 3, 1]
repeatChecking(arr1)
04.28
阶乘
方法1
function multi(num) {
var rst = 1
if (num < 0) {
return -1
}
if (num === 1 || num === 0) {
return 1
}
while (num > 1) {
rst = rst * num
num--
}
return rst
}
方法2 递归形式
function multi2(num) {
if (num < 0) {
return -1
}
if (num === 1 || num === 0) {
return 1
}
return num * multi2(--num)
}
生成斐波那契数列
// 生成n位
function fibonacci(n) {
var fib = []
var i = 0
while (i < n) {
if (i <= 1) {
fib.push(1)
}
if (i > 1) {
fib.push(fib[i - 1] + fib[i - 2])
}
i++
}
return fib
}
console.log(fibonacci(7))
二分查找
优点:速度快,比较次数少
缺点:查找的数组必须有序
function findNum(arr, num) {
var low = 0
var high = arr.length - 1
while (low < high) {
var mid = parseInt((low + high) / 2)
if (num === arr[mid]) {
return mid
} else if (num < arr[mid]) {
high = mid - 1
} else if (num > arr[mid]) {
low = mid + 1
}
}
}
var arr1 = [1, 2, 4, 5, 7, 9, 10, 20, 33]
console.log(findNum(arr1, 10))