b_1. 算法之知识归纳

1. 常见的数据结构

  • 数组(一维、二维)
  • 队列
  • 堆(每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆)
  • 父结点索引:(i-1)/2,左孩子索引:2i+1,右孩子索引:2i+2
  • 大根堆:arr(i)>arr(2i+1) && arr(i)>arr(2i+2)
  • 小根堆:arr(i)<arr(2i+1) && arr(i)<arr(2i+2)
  • 链表(单链表、双向链表、双向循环链表)
  • 树(二叉树、满二叉树、完全二叉树、平衡二叉树、二分搜索树、红黑树、B-树、B+树、B*树等等)
  • 二叉树:任何一个节点的子节点数量不超过2。
  • 满二叉树:所有叶子结点都在最后一层,且节点的总数为2^n-1(n为树的高度)。
  • 完全二叉树:所有叶子结点都在最后一层或倒数第二层,且节点优先左排列。
  • 平衡二叉树:它是一颗空树或左右两个子树的高度差的绝对值不超过1,且子树也是同理。
  • 二分搜索树:左节点小于等于根节点值,右节点大于等于根节点值。
  • 红黑树:平衡二叉树,根节点和叶子节点黑色,红节点必须有两个黑色节点,从任意节点到叶子节点都包含相同的黑色节点。
2. 递归调用是有代价的,其代价为函数调用和系统栈空间。
3. 按位运算法
  • 【&】按位与,两真才为真。
  • 【|】按位或,一真就为真。
  • 【^】按位异或,不同为真,相同为假。
  • 【~】按位非,取反。
4. 逻辑运算符
  • 【&&】逻辑与,两真才为真。
  • 【||】逻辑或,一真就为真。
  • 【!】逻辑非,取反。
5. 位移操作符
  • 【<<】左移,右边空位填0。
  • 【>>】右移,高位为0则左边空位填0,高位为1则左边空位填1。
  • 【>>>】无符号右移,左边空位填0。
6. 按位运算符和逻辑运算符优先级
  • 按位运算符 > 逻辑运算符
  • 【&】>【^】>【|】>【&&】>【||】
7. 有符号右移一位【>>1】相当于除以2操作,这里要注意:负数的有符号右移一位操作是增大一半,正数的有符号右移一位操作是减少一半,-1>>1值为-1,1>>1值为0。
8. &1操作可以来判断奇偶性,值为1代表为奇数,值为0代表为偶数。
9. 可以利用num & (num - 1)来判断num对应的二进制有多少个1。
10. m ^ n可以得知m和n对应的二进制相差多少个1。
11. 时间复杂度:O(n),空间复杂度:O(1)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.链表 1.实现一个单向链表 2.找出链表相交节点,假设均没有环 3.判断链表是否有环思路:使用快慢两个指针,当...
    X1028阅读 3,919评论 0 0
  • 1.冒泡排序 从头开始,不断的比较相邻的两个数,小的放前边,大的放后边,一次比较之后,最大的数字会出现在数组的尾端...
    任振铭阅读 4,839评论 0 0
  • 1. 数组 1.1 删除 题解题思路26. 删除排序数组中的重复项[https://leetcode-cn.com...
    王龙江_3c83阅读 2,325评论 0 0
  • 目录 1 左神部分集锦 2 Leetcode前150题 3 牛客网剑指offer 4 JavaG 5 题...
    小小千千阅读 4,832评论 0 0
  • 一、冒泡排序 基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。过程:①、比较相邻的元素。如果第一个比第二个...
    xiaoqunzi233阅读 1,807评论 0 0