0. 算法的简单了解
0.1 思路:会用到递归、循环,和数组结构的思想
- 递归可以用代入法或调用栈快速理解;
- 所有的递归都可以改写成循环;
- 空间复杂度和时间复杂度:zhuanlan.zhihu.com/p/50479555
0.2 数据结构包括数组和hash
- 数组分为队列和栈;队列是先进先出,数组是后进先出;
- hash用来存储 key-value 键值对
1. 快速排序
阮一峰的快速排序:www.ruanyifeng.com/blog/2011/0…
var quickSort = function(arr) {
if (arr.length <= 1) { return arr; } // 检查元素个数,小于等于1直接返回
var pivotIndex = Math.floor(arr.length / 2); // Math.floor()可以理解为向下取整
var pivot = arr.splice(pivotIndex, 1)[0]; // 选择基准pivot,将其与原数组分离
var left = []; // 再定义一左一右两个孔数组
var right = [];
for (var i = 0; i < arr.length; i++){ // 遍历数组,小于pivot的放左边,大于放右边
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right)); //递归重复过程后排序
};
2. 计数排序
杜小白的计数排序(有优化空间):blog.csdn.net/DFF1993/art…
function countingSort(arr, maxValue) {
var bucket = new Array(maxValue+1),
sortedIndex = 0;
arrLen = arr.length,
bucketLen = maxValue + 1;
for (var i = 0; i < arrLen; i++) {
if (!bucket[arr[i]]) {
bucket[arr[i]] = 0;
}
bucket[arr[i]]++;
}
for (var j = 0; j < bucketLen; j++) {
while(bucket[j] > 0) {
arr[sortedIndex++] = j;
bucket[j]--;
}
}
return arr;
}
var arr = [2, 3, 8, 7, 1, 2, 7, 3];
console.log(coutingSort(arr,8))
3. 大数相加
参考了leetcode上的答案
var maxSubArray = function(nums){
let sum = 0
let Max = nums[0]
for(let i = 0; i<nums.length; i++){
sum += nums[i] // x+=y 等同于 x=x+y
Max = Math.max(Max,sum) // Math.max()返回一组数中的最大值
if(sum<0){
sum=0
}
}
return Max
}
4. 两数之和
参考了leetcode上的答案
var twoSum = function (nums, target){
for(let i = 0; i< nums.length; i++){
for(let j = i+1; j<nums.length; j++){
if(target - nums[i] === nums[j]){
return [i,j]
}
}
}
console.log('No solution')
}