
算法
moekosu
2014年6月毕业,统招本科软件工程专业,三年Java,四年前端,有好机会可以联系,外包勿扰
展开
-
【leetCode】全排列
###解题思路经典回溯算法###代码/***@param{number[]}nums*@return{number[][]}*/varpermute=function(nums){letsum=[]backtrack(nums,[],sum)returnsum};functionbacktrack(nums,arr,sum){if(arr.length===nums.length){...原创 2022-03-06 01:03:34 · 594 阅读 · 0 评论 -
【leetCode】快速排序
【实现思路】快速排序就是每次取某一个数作为参考数,每一个与他进行对比,分成大于,小于,等于,三个数组,再对大于,小于的数组进行递归排序,直到所有排完版本1.0 取最后一个数作为参考数,将数组分为大于,小于两个数组进行递归排序版本2.0 取最后一个数作为参考数,将数组分为大于,小于,等于三个数组,等于这个数组不再次排序版本3.0 取随机数作为参考数,后续一样,这样能保证不会一直遭遇到最差的情况【实现代码】版本2.0// 入口function search(nums = [])...原创 2022-02-02 23:16:19 · 698 阅读 · 0 评论 -
【leetCode】归并排序
【题目】在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。[7,5,6,4] => 5【归并排序】// 入口方法function search(nums = []) { sort(nums, 0, nums.length - 1) return nums}// 归并排序中间方法,将数组分为两个数组,进行排序,排序完后再merge合在一起function sort(nums, l, r) {原创 2022-02-01 18:32:39 · 2780 阅读 · 0 评论 -
Diff算法对比(Vue,React)
传统Diff算法传统Diff算法使用的是循环递归每一个节点,不区分层级即顶层节点循环遍历新vnode的每个节点,这样会导致复杂度能达到O(n^3)Vue的Diff算法(Vue2.0)vue的diff算法使用了patch函数,类似打补丁使用的是4指针算法,在新旧节点头尾定义指针位置进行遍历ps:Vue3.0的diff算法借鉴了ivi算法和inferno算法React的Diff算法react的Diff算法,将节点分为三种1.tree diff对整个树结构进行分层处理,同一原创 2022-01-17 21:49:45 · 1447 阅读 · 0 评论 -
【leetCode】二分查找
【题目】给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1【解题代码】function search( nums , target ) { // write code here if (nums.length === 0) return -1 let p = 0 let q = nums.length - 1 while(p &l.原创 2021-07-27 18:35:09 · 103 阅读 · 0 评论 -
【leetCode】判断链表中是否有环
【题目】给出一个链表,判断链表中是否存在环【解题思路】双指针,指针p前进一步,指针q前进两步,当没有环存在时,q会先一步到达null,当有环存在时,pq会相遇,while的判断条件只需要判断q,因为p是慢指针,走的节点q都已经走过了【解题代码】function hasCycle( head ) { // 双指针 let p = head let q = head let flag = false while (q !== null &&a原创 2021-07-26 15:48:39 · 219 阅读 · 0 评论 -
【leetCode】反转链表
【解题思路】pre:指向反转后的链表的第一个位置,即在最开始是在1位置,后面逐渐移到最后,同时作为返回参数cur:当前正在操作的节点,最开始在1位置,逐步后移nex:保存正在操作的节点的下一个节点【解题代码】/*function ListNode(x){ this.val = x; this.next = null;}*/function ReverseList(pHead){ // write code here let pre =...原创 2021-07-17 15:02:06 · 96 阅读 · 0 评论 -
【算法】基础算法:动态规划
【适用于动态规划的必备条件】1.问题的最优解所包含的子问题的解也是最优的,具有最优子结构2.某状态以后的过程不会影响以前的状态,只与当前状态有关3.子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到【使用动态规划分解问题】1. 首先将问题分为多个步骤(子问题),每个步骤为最优解2. 按顺序解,且下个步骤需要上一个步骤的解才能执行(不影响上一个步骤的解)3. 多步骤间解可以降低大部分复杂度,同时进行空间优化【经典案例】一般使用场景最多的是树形结构或多维数...原创 2020-11-09 11:59:04 · 97 阅读 · 0 评论