随笔分类 - 算法
摘要:sort在不同浏览器下执行效果 let arr = [ {name: 'zhangsan', age: 40}, {name: 'lisi', age: 20}, {name: 'laowang', age: 50}, {name: 'xiaoli', age: 60}, {name: 'xiaoj
阅读全文
摘要:二叉树的遍历方式有四种,分别是前序遍历,中序遍历,后序遍历和层级遍历。 其中前序、中序、后序遍历呢,又可以细分为递归遍历,基于栈的遍历和Morris遍历。层级遍历主要是基于栈的遍历。 下面我们来分别讲讲这几种遍历方式。 递归遍历 递归遍历非常的简单,直接记住套路,直接套即可。 function tr
阅读全文
摘要:冒泡排序和快速排序都是属于交换排序的一种。所谓交换,就是根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。 冒泡排序算法的基本思想就是:在待排序表中,从后往前(或从前往后)两两比较相邻元素的值,若逆序则交换它们,知道序列比较完,这就是一趟冒泡。此时这个元素就在它的最终位置了,下一趟冒
阅读全文
摘要:快速排序是对冒泡排序的一种改进。其基本思想就是基于分治法的: 在待排序表 L[1...n] 中任意取一个元素 pivot 作为基准值,通过一趟排序将待排序表划分为独立的两部分 L[1...k-1] 和 L[k+1...n], 使得 L[1...k-1] 内所有的元素小于 pivot ,L[k+1..
阅读全文
摘要:双指针 双指针可分为三类: 左右指针 快慢指针 滑动窗口 其中,滑动窗口 已单独写了一篇随笔,可跳转查看。 在快慢指针中,又有一类典型算法,叫 Floyd's cycle-finding algorithm,其又名 Floyd's Hare and Tortoise Algorithm。 在这里,我
阅读全文
摘要:Floyd's cycle-finding algorithm 引用维基百科的定义:Floyd's cycle-finding algorithm is a pointer algorithm that uses only two pointers, which move through the s
阅读全文
摘要:Boyer-Moore Voting Algorithm 以题讲解 我们以 LeetCode 的 169. Majority Element 来讲解这个巧妙的算法吧。 在给定的 n 个数据中,至少存在 n / 2 + 1 个相同的数据,找出这个特殊的数据。 算法思想 这个算法的主要思想可以这样理解:
阅读全文
摘要:Sliding Window 滑动窗口就是双指针的一种技巧,运用的就是双指针,但是仅能维持一个指针移动,另一个指针呆着不动。 当一个指针维持不动,另一个指针移动时,两个指针之间的部分就是一个窗口,这个窗口是不断的扩大和缩小的,直到末尾或找到结果。 1. 思路 简单思路就是: right 指针不断向右
阅读全文
摘要:前缀和技巧 前缀和技巧 主要用于解决数组的子数组问题。 使用前缀和的经典题目: 560.Subarray Sum Equals K 930.Binary Subarrays With Sum 1. 什么是前缀和 这里以 LeetCode 的一道题目,560. Subarray Sum Equals
阅读全文
摘要:Java代码: 1 import java.util.Scanner; 2 3 @SuppressWarnings("all") 4 public class Main { 5 public static void main(String[] args) { 6 Scanner scanner =
阅读全文

浙公网安备 33010602011771号