avatar

javascript基础算法学习

判断一个单词是否是回文

会问是指把它位置颠倒过来和原来是一样的即是回文

1
2
3
4
5
6
7
8
9
10
function checkPalindrom(str) {
return str == str.split('').reverse().join('')
}
/**
checkPalindrom('eye')
=> true

checkPalindrom('eyes')
=> false
*/

去掉整型数组重复的值

1
2
比如输入:[1,1,2,3,11,11]
输出: [1,2,3,11]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let unique = function(arr) {
let hashTable = {}
let data = []
for (let i = 0; i < arr.length; i++) {
if (!hashTable[arr[i]]) {
hashTable[arr[i]] = true
data.push(arr[i])
}
}
return data
}

let newArr = arr.filter((x, index, self) => self.indexOf(x) === index)

let newArr2 = Array.from(new Set(arr))

统计字符串中出现最多的字母

比如一个连续的英文字母,找出重复最多的字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function findMaxReaptChar(str) {
if (str.length == 1) {
return str
}
let charObj = {}
for (let i = 0; i < str.length; i++) {
// charobj 里面放次数
if (!charObj[str.charAt(i)]) {
charObj[str.charAt(i)] = 1
} else {
charObj[str.charAt(i)] += 1
}
}
let maxChar = '',
maxValue = 1
for (let k in charObj) {
if (charObj[k] >= maxValue) {
maxChar = k
maxValue = charObj[k]
}
}
return maxChar
}

排序算法

多种方式 可以看上一章 JavaScript基础算法(一)

不借助临时变量,进行两个整数交换

相当于 a = a + (b - a) 所以 a = b

1
2
3
4
5
6
function swap(a, b) {
b = b - a
a = a + b
b = a - b
return [a, b]
}

找出正数组里面最大差值

拿到最大值减去最小值得出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function getMaxProfit(arr) {
let minPrice = arr[0]
let maxProfit = 0
for (let i = 0; i < arr.length; i++) {
let currentPrice = arr[i]
// 每一个都跟第一个比 拿小
minPrice = Math.min(minPrice, currentPrice)
// 每一个减最小的
let potentialProfit = currentPrice - minPrice
//取大的
maxProfit = Math.max(maxProfit, potentialProfit)
}
return maxProfit
}
/*
输入: [10,3,5,12,1]
输出: 11
*/

随机生成制定长度字符串

比如要长度为6的字符串 9j5rnf

1
2
3
4
5
6
7
8
9
10
function randomString(n) {
let str = 'abcdefghijklmnopqrstuvwxyz9876543210'
let tmp = '',
i = 0,
l = str.length
for (i = 0; i < n; i++) {
tmp += str.charAt(Math.floor(Math.random() * l))
}
return tmp
}

阶乘

非递归实现

1
2
3
4
5
6
7
8
9
function factorialize(num) {
let result = 1
if (num < 0) return -1
if (num == 0 || num == 1) return 1
while(num > 1) {
result *= num--
}
return result
}

递归实现

1
2
3
4
5
6
function factorialize(num) {
let result = 1
if (num < 0) return -1
if (num == 0 || num == 1) return 1
if (num > 1) return num * factorialize(name-1)
}
文章作者: 张复明
文章鏈接: https://hexo.zhangaming.com/2020/04/22/js-common-algorithm/
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 阿明的博客
打賞
  • 微信
    微信
  • 支付寶
    支付寶

評論