let twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] === target - nums[j]) {
return [i, j]
}
}
}
return []
}
var twoSum = function (nums, target) {
let map = new Map()
for (let i = 0; i < nums.length; i++) {
if (map.has(target - nums[i])) {
return [map.get(target - nums[i]), i]
} else {
map.set(nums[i], i)
}
}
return []
}
// 1.Quickersort通过数组选取一个元素表示为基准点,把数组中的所有其他元素分为两类-(大于和小于此基准点的数组) // 2.然后把作为这一轮排序结果的两个数组(数组元素都小于基准点的数组和数组元素都大于基准点的数组)再进行相同的排序。即分别再选个基准点,然后基于基准点分为两个数组元素分别小于和大于基准点的数组。 // 3.最终,由于最后数组中没有元素或只有一个元素,因此不用再比较了。剩下的值都已经基于基准点拍好序了。
const quickSort1 = arr => {
if (arr.length <= 1) {//数组小于等于1时的情况
return arr;
}
const midIndex = Math.floor(arr.length / 2)//取中间的元素为基准点
const arrArr = arr.splice(midIndex, 1)
const midIndexVal = arrArr[0]
const left = []
const right = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] < midIndexVal) {
left.push(arr[i]);
} else {
right.push(arr[i])
}
}
return quickSort1(left).concat(midIndexVal, quickSort1(right));//重复进行上面的步骤,直到剩下小于等于一个元素。
}
// 是一种计算机科学领域的较简单的排序算法 // 它重复的走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小,首字母)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是该元素列已经排序完成。
冒泡排序是效率最低的排序算法,由于算法嵌套了两轮循环,所以时间复杂度委O(n^2)
最好的情况给出一个已经排序的数组进行冒泡排序,时间复杂度为O(n)
// 冒泡排序
function bubbleSort(arr) {
let len = arr.length;
// 遍历数组的长度,以确定循环次数
for (let i = 0; i < len;i++) {
// 遍历数组len次,忽略后面的i项
for (let j = 0; j < len - 1 - i; j++) {
// 将每一项与后一项进行对比,不符合要求的就换位
if (arr[j] > arr[j + 1]) {
[arr[j + 1], arr[j]] = [arr[j], arr[j + 1]]
}
}
}
return arr
}
题目分析,斐波那契数列公式为:f[n]= f[n-1] +f[n-2] ,初始值为f[0]=0,f[1]=1,目标求f[n]
function Fibonacci(n){
if(n===0||n===1){
return n
}
return Fibonacci(n-1)+Fibonacci(n-2)
}
module.exports={
Fibonacci
}