class TrieNode{ public: int pass; int end; vector<TrieNode*> nexts; TrieNode(){ pass = 0; end = 0; for(int i = 0; i < 26; i++) nexts.push_b
图的表达方式邻接表:邻接矩阵:数组:二维数组:自己的图表示方式:class Edge; class Node{ public: int val; int in; //入度 int out; // 出度 vector<Node*> nexts; // 指向的节点 vector<Edge*> edges;
非递归实现前序遍历根节点入栈,进行如下操作直到栈空:step1:取出栈顶元素,打印step2:如果栈顶元素有右孩子,右孩子入栈step3:如果栈顶元素有左孩子,左孩子入栈class Solution { public: void preOrder(TreeNode *root){ if(root == nullptr){ return;
判断链表是否有环,若有,返回第一个入环节点,若无,返回空。快慢指针,若无环,快指针走到空,若有环,快慢指针相遇,然后快指针原地不动,慢指针回到头节点,快慢指针每次各走一步,相遇的节点为入环节点。class Solution { public: ListNode *getLoopNode(ListNode *head){ ListNode *slow = head;
排序总结时间复杂度空间复杂度是否能有稳定性选择O(N*N)O(1)×冒泡O(N*N)O(1)✔️插入O(N*N)O(1)✔️归并O(N*logN)O(N)✔️快排(一般指3.0)O(N*logN)O(N*logN)×堆O(N*logN)O(1)×基数排序作为不基于比较的排序,有稳定性基础类型的排序一般排序用快排,因为其时间复杂度常数项更小,需要保持稳定定用归并,不想占用额外空间用堆排序非基础类型的
堆排序使用数组和表示堆大小的整数heapSize表示堆:vector<int> arr{9, 5, 3, 7, 2}; int heapSize = 5;heapSize = 5 表示数组从索引0开始的5个元素表示一个堆。堆结构就是用数组实现的完全二叉树结构。求数组中索引i位置节点的父子节点:父节点: (i - 1) / 2左子节点: 2 * i + 1右子节点: 2 * i + 2表
递归行为时间复杂度计算:master公式T(N) = a * T(N/b) + O(Nd)N:母问题规模a:子问题计算次数N/b:子问题规模O(Nd):每次递归除子问题外其他操作时间复杂度1)log(b,a) > d : T(N) = O(Nlog(b,a)) 2)log(b,a) < d : T(N) = O(Nd) 
算法时间复杂度O(x)空间复杂度O(x)数据状况是否影响时间复杂度表现选择排序n21否冒泡排序n21否插入排序n21是(最好情况下O(N))1.选择排序:遍历找出0~n-1最小的数放在0位置,遍历找出1~n-1最小的数放在1位置时间复杂度O(n2) 空间复杂度O(1)void swap(vector<int>& nums, int i, int j){ in
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号