随笔分类 - 算法
摘要:https://mp.weixin.qq.com/s/FFsvWXiaZK96PtUg-mmtEw 703. 数据流中的第 K 大元素 https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/ class KthLargest
阅读全文
摘要:
阅读全文
摘要:使用单调栈解决这类问题 假设nums1是nums2的子集,且没有重复元素,使用两个工具,一个是辅助栈(倒序插入nums2),一个是哈希表, 解题思路: 将nums2中的每一个元素对应的右边第一个比他大的元素记录下来,然后将这个值与他右边的第一个大于它的值同时存入哈希表中,在之后遍历nums1的时候可
阅读全文
摘要:基础类型的数组不用纠结稳定性 在一些要求有多组排序要求的时候。 eg:不同班级不同年龄,当按照年龄排序之后,再进行班级的排序,如果是稳定的排序,第二次排序会保留第一次排序的结果,即:既是按年龄的排序又是按班级的排序。 不具备稳定性的排序: 选择排序,快速排序,堆排序 具有稳定性的排序: 冒泡排序,插
阅读全文
摘要:题目1 单链表是否为回文结构 方案一: 容器 (牺牲空间复杂度) 把这些元素从头开始放到栈中,结束以后依次弹出与第一个数相比较 方案二: 快慢指针 快指针一次走两步,慢指针一次走一步,当快指针为null时,我们找到了链表的尾部以及链表中间的位置 此时将中间位置的结点指向空,反转链表的右半部分,然后双
阅读全文
摘要:基数排序(不是基于比较的排序):非负数的十进制数 时间复杂度为O(N),额外空间负载度O(M) 基本思想: 找出要排序的所有数字中的最大数,看他的位数,把其他没有达到位数的数字前面补零,然后准备0~9的10个桶(队列),先按照个位进行入桶,然后按顺序把他们倒出来,先进桶的先倒出,再按照十位,百位。。
阅读全文
摘要:堆排序在是建立在完全二叉树上的排序模型,在计算机中使用数组实现。 背景知识: 完全二叉树:除最后一层节点外,其他层节点都必须要有两个子节点,并且最后一层节点都要左排列 大根堆:每个结点的值都大于或等于其左右孩子结点的值 ** 堆的存储** 我们默认使用数组的1位置为起始位置, 下标为 i的结点的父结
阅读全文
摘要:通俗来说就是自定义比较 比较器的实质就是重载比较运算符(在C++中叫重载比较运算符) 比较器可以很好的应用在特殊标准的排序上 比较器可以很好的应用在根据特殊标准排序的结构上 基本使用: 对于任意比较器,首先指定两个对象,o1,o2, 返回值有统一的规范: 当返回负数时:认为o1应该排在o2的前面;
阅读全文
摘要:不适用OJ的情况下,测试自己的代码是否正确 构造方法: 实现一个随机样本生成器,生成所需数据 利用暴力或系统自带API实现一个所需效果的方法 测试两组方法结果是否一致 参考代码: 快速排序 package class02; import java.util.Arrays; public class
阅读全文
摘要:从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。 时间复杂度O(N^2),额外空间复杂度O(1) 核心代码 public static void insertionSort(int[] arr)
阅读全文
摘要:遍历所有元素后,将最小的移动到首位,随后在此遍历剩余元素,将次小的移动到第二位 时间复杂度O(N^2),额外空间复杂度O(1) 核心代码 public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2)
阅读全文
摘要:从头开始依次与后一个数进行比较,交换为小数在前,大数在后 时间复杂度O(N^2),额外空间复杂度O(1) 核心代码 public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } fo
阅读全文
摘要:异或 异或是一种基于二进制的位运算 理解: 就是无进位相加 性质: 0 ^ N == N N ^ N == N 异或运算满足交换律和结合律 不用额外变量交换两个数 a = a ^ b b = a ^ b a = a ^ b 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这个数 所
阅读全文
摘要:步骤: 确定分界点 递归排序left,right 合并 模板: void merge_sort(int q[], int l, int r) { if (l >= r) return; int mid = l + r >> 1; // 递归排序左边和右边,以下两行执行完,就有序了 merge_sor
阅读全文
摘要:来源:acwing 链表 单链表 // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 int head, e[N], ne[N], idx; // 初始化 void init() { head = -1; idx = 0; } // 在链表头插
阅读全文
摘要:常用 1)在一个有序数组中,找某个数是否存在 2)在一个有序数组中,找>=某个数最左侧的位置 3)局部最小值问题 整数二分 bool check(int x) {/* ... */} // 检查x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: in
阅读全文
摘要:代码模板来源: acwing.com AcWing 快速排序是选一个数作为基准,然后与其他的数字进行对比,小的放左边,大的放右边。 模板: void quick_sort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j =
阅读全文
摘要:C++提高编程 简单学习C中STL,方便刷题。笔记来源黑马C(因方便在网页查看) 本阶段主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层的使用 vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back
阅读全文
摘要:前面加有void 的函数,不能返回任何数据,return语句不能使用,这类函数应该将所有应该实现的功能在本函数内全部实现。但是并不是不能与外部交换数据,仍然可以通过引用型参数传递数据,只是调用时不能直接接受返回值,因为就没有返回值。 前面有int的函数,返回值是整型数,可能是结果是整数的数,也可能是
阅读全文