摘要: Leetcode 942. DI String Match C++ class Solution { public: vector<int> diStringMatch(string s) { int n = s.length(), lo = 0, hi = n; vector<int> perm( 阅读全文
posted @ 2022-05-09 09:21 Logan_Xu 阅读(17) 评论(0) 推荐(0) 编辑
摘要: Leetcode 3. Longest Substring Without Repeating Characters 本题是一个中等题,采用双指针限定滑动窗口范围。官方题解有点让人困惑,总的来说思路和官方题解是一样的,不过官方题解使用 unordered_set。我使用的是 unordered_ma 阅读全文
posted @ 2022-05-06 16:18 Logan_Xu 阅读(29) 评论(0) 推荐(0) 编辑
摘要: Leetcode 2. Add Two Numbers 这道题比较简单,主要练练手,通过这道题可以看到 leetcode 官方对于不同语言的链表的定义,了解不同语言之间的差异,特别是关于 Swift 的 nil,var, let 处理。 C++ /** * Definition for singly 阅读全文
posted @ 2022-05-06 11:23 Logan_Xu 阅读(31) 评论(0) 推荐(0) 编辑
摘要: Leetcode 1. Two Sum 前言 本篇是 Leetcode 刷题第一篇,对于大部分人来说 Two Sum 都是刷题的开端,就像单词书的 abandon 。至于后续会不会 abandon,拭目以待。 整个 Leetcode 刷题系列我准备使用多种语言来写。我的第一份工作就是全栈(干)工程师 阅读全文
posted @ 2022-05-06 10:38 Logan_Xu 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 堆 堆的一个经典的实现是完全二叉树(complete binary tree),这样实现的堆称为二叉堆(binary heap)。 这里来说明一下满二叉树的概念与完全二叉树的概念。 满二叉树:除了叶子节点,所有的节点的左右孩子都不为空,就是一棵满二叉树,如下图。 可以看出:满二叉树所有的节点都拥有左 阅读全文
posted @ 2022-03-01 16:02 Logan_Xu 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 基数排序 基数排序是一种非比较型整数排序算法,其原理是将数据按位数切割成不同的数字,然后按每个位数分别比较。 假设说,我们要对 100 万个手机号码进行排序,应该选择什么排序算法呢?排的快的有归并、快排时间复杂度是 \(O(n \log n)\),计数排序和桶排序虽然更快一些,但是手机号码位数是11 阅读全文
posted @ 2022-03-01 15:51 Logan_Xu 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 桶排序 桶排序可以看成是计数排序的升级版,它将要排的数据分到多个有序的桶里,每个桶里的数据再单独排序,再把每个桶的数据依次取出,即可完成排序。 我们拿一组计数排序啃不掉的数据 [ 500,6123,1700,10,9999 ] 来举例。 第一步,我们创建 10 个桶,分别来装 0-1000 、100 阅读全文
posted @ 2022-03-01 15:40 Logan_Xu 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 计数排序 计数排序是一种非基于比较的排序算法,我们之前介绍的各种排序算法几乎都是基于元素之间的比较来进行排序的,计数排序的时间复杂度为 \(O(n + m)\),m 指的是数据量,说的简单点,计数排序算法的时间复杂度约等于 \(O(n)\),快于任何比较型的排序算法。 以下以[ 3,5,8,2,5, 阅读全文
posted @ 2022-03-01 15:21 Logan_Xu 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 堆排序 顾名思义,是利用堆这种数据结构来进行排序的算法。 如果你了解堆这种数据结构,你应该知道堆是一种优先队列,两种实现,最大堆和最小堆,由于我们这里排序按升序排,所以就直接以最大堆来说吧。 我们完全可以把堆(以下全都默认为最大堆)看成一棵完全二叉树,但是位于堆顶的元素总是整棵树的最大值,每个子节点 阅读全文
posted @ 2022-03-01 14:27 Logan_Xu 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 快速排序 快速排序的核心思想也是分治法,分而治之。它的实现方式是每次从序列中选出一个基准值,其他数依次和基准值做比较,比基准值大的放右边,比基准值小的放左边,然后再对左边和右边的两组数分别选出一个基准值,进行同样的比较移动,重复步骤,直到最后都变成单个元素,整个数组就成了有序的序列。 我们以[ 8, 阅读全文
posted @ 2022-03-01 14:06 Logan_Xu 阅读(75) 评论(0) 推荐(0) 编辑