[记录]我的算法学习路径

简介: [记录]我的算法学习路径

常见算法

// 反转链表
function ListNode(val, next) {
    this.val = val;
    this.next = next || null;
}
cn = new ListNode(3, null);
bn = new ListNode(2, cn);
an = new ListNode(1, bn)
var reverseList = function(head) {
    let pre=null, cur=head;
    while(cur) {
        const next = cur.next;
        cur.next = pre;
        pre = cur;
        cur = next;
    }
    return pre;
};
reverseList(an);

// 斐波那契数
function fib(n=0) {
  if(n===0) return 0;
  if(n===1) return 1;
  return fib(n-1) + fib(n-2);
}

var fib = function(n) {
    if (n < 2) {
        return n;
    }
    let p = 0, q = 0, r = 1;
    for (let i = 2; i <= n; i++) {
        p = q;
        q = r;
        r = p + q;
    }
    return r;
};

// 快排
function quickSort(arr = []) {
  const rec = (arr) => {
    if (arr.length <= 1) return arr;
    const left = [];
    const right = [];
    const mid = arr[0];
    for (let i = 1; i < arr.length; i++) {
      const cur = arr[i];
      if (cur < mid) {
        left.push(cur);
      } else {
        right.push(cur);
      }
    }
    return [...quickSort(left), mid, ...quickSort(right)];
  };
  return rec(arr);
}
quickSort([1, 3, 2]);

function quickSort(arr=[]) {
    if(arr.length <=1)return arr;
    let [left, right] = [[], []];
    const cur = arr.shift();
    arr.forEach(item => item < cur ? left.push(item): right.push(item));
    return [...quickSort(left), cur, ...quickSort(right)]
}

// 选择排序
function selectionSort(arr = []) {
  for (let i = 0; i < arr.length; i++) {
    let minIdx = i;
    for (let j = i; j < arr.length; j++) {
      if (arr[j] < arr[minIdx]) {
        minIdx = j;
      }
    }
    const temp = arr[i];
    arr[i] = arr[minIdx];
    arr[minIdx] = temp;
  }
  return arr;
}
selectionSort([1, 3, 2]);

// 插入排序
function insertionSort(arr = []) {
  for (let i = 0; i < arr.length; i++) {
    const temp = arr[i];
    let j = i;
    while (j > 0) {
      if (arr[j - 1] > temp) {
        arr[j] = arr[j - 1];
      } else {
        break;
      }
      j -= 1;
    }
    arr[j] = temp;
  }
  return arr;
}
insertionSort([1, 3, 2]);

// 二分查找
function binarySearch(nums=[], target) {
  let left = 0, right = nums.length - 1; // [left, right]
  while(left <= right) {
    const mid = Math.floor((left + right) / 2);
    if(target < nums[mid]){
      right = mid - 1;
    } else if(target > nums[mid]) {
      left = mid +1;
    } else {
      return mid
    }
  }
  return -1;
}

// 合并有序的两个链表
var mergeTwoLists = function (list1, list2) {
    const res = new ListNode(0);
    let p = res;
    while (list1 && list2) {
        if (list1.val < list2.val) {
            p.next = list1;
            list1 = list1.next;
        } else {
            p.next = list2;
            list2 = list2.next;
        }
        p = p.next;
    }
    list1 && (p.next = list1);
    list2 && (p.next = list2);
    return res.next;
};

// LRU
class LRU {
  constructor(capacity) {
    this.capacity = capacity;
    this.map = new Map();
  }
  get(key) {
    if (this.map.has(key)) {
      const value = this.map.get(key);
      // 先删除
      this.map.delete(key);
      // 再添加
      this.map.set(key, value);
      return value;
    }
    return -1;
  }
  put(key, value) {
    // 先删除
    if (this.map.has(key)) {
      this.map.delete(key);
    }
    // 再添加
    this.map.set(key, value);
    // 容量控制
    if (this.map.size > this.capacity) {
      // 迭代器的使用,删除第一个
      this.map.delete(this.map.keys().next().value);
    }
  }
}

题目-字符串相关

  1. 翻转整数
// 题解
const inputList = [123, -123, 120, 2147483648, -2147483648];
function adi(num) {
    const MAX = 2 ** 32;
    const MIN = 0 - MAX;
    const isMinus = num < 0;
    isMinus && (num = 0 - num);
    let rest = String(num).split('').reverse().join('');
    const result = isMinus ? 0 - parseInt(rest, 10):  parseInt(rest, 0);
    if(result >= MAX || result <= MIN) {return 0}
    return result;
}
inputList.forEach(num => {
  console.log(adi(num));
})
目录
相关文章
|
20天前
|
机器学习/深度学习 算法 C++
【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解
题目要求根据城堡北墙和西墙箭靶上的箭数,推断骑士从西北角到东南角的唯一路径。每步移动时向正北和正西各射一箭,同一格不重复经过。通过DFS回溯模拟“拔箭”过程,验证路径合法性。已知箭数约束路径唯一,最终按编号输出行走顺序。
|
21天前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
137 3
|
2月前
|
算法 机器人 定位技术
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
|
21天前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
|
1月前
|
机器学习/深度学习 传感器 算法
基于全局路径的无人地面车辆的横向避让路径规划研究[蚂蚁算法求解](Matlab代码实现)
基于全局路径的无人地面车辆的横向避让路径规划研究[蚂蚁算法求解](Matlab代码实现)
119 8
|
26天前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
118 1
|
1月前
|
算法 数据挖掘 区块链
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
|
1月前
|
存储 算法 数据可视化
基于禁忌搜索算法的TSP问题最优路径搜索matlab仿真
本程序基于禁忌搜索算法解决旅行商问题(TSP),旨在寻找访问多个城市的最短路径。使用 MATLAB 2022A 编写,包含城市坐标生成、路径优化及结果可视化功能。通过禁忌列表、禁忌长度与藐视准则等机制,提升搜索效率与解的质量,适用于物流配送、路径规划等场景。
|
1月前
|
机器学习/深度学习 负载均衡 算法
【卡车和无人机协同配送路径优化】遗传算法求解利用一辆卡车和两架无人机配合,将小包裹递送给随机分布的客户,以使所有站点都由卡车或无人机递送一次后返回起始位置(中转站)研究(Matlab代码实现)
【卡车和无人机协同配送路径优化】遗传算法求解利用一辆卡车和两架无人机配合,将小包裹递送给随机分布的客户,以使所有站点都由卡车或无人机递送一次后返回起始位置(中转站)研究(Matlab代码实现)
150 7

热门文章

最新文章