数据结构与算法
逍遥飞
这个作者很懒,什么都没留下…
展开
-
二分法
题目1:(leetcode. 4)寻找两个有序数组的中位数给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:num...原创 2020-03-15 17:32:18 · 163 阅读 · 0 评论 -
二叉树 - 序列化与反序列化
/*中序遍历结果 + 前序遍历结果 ==> 生成二叉树 *//*前: A BDE CF中: DBE A CF1. 根据前序遍历,确定根节点为A2. 在中序遍历结果里找到根节点A,A左边则为其左子树,右边则为其右子树 */#include <stdlib.h>#include <unistd.h>#include <string.h&...原创 2019-10-23 14:06:38 · 113 阅读 · 0 评论 -
动态规划算法 -- samples
动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题...原创 2019-10-16 15:16:34 · 184 阅读 · 0 评论 -
常见排序算法 -- 堆排序 与 小顶堆大顶堆
大顶堆:完全二叉树,每个结点的值都大于或等于其左右孩子结点的值小顶堆:完全二叉树,每个结点的值都小于或等于其左右孩子结点的值#include <iostream>#include <string>#include <vector>#include <stdlib.h>using namespace std;//小顶堆clas...原创 2019-10-08 17:55:38 · 172 阅读 · 0 评论 -
队列 - 队列的创建和基本操作
队列 / 列队 Queue//二叉树typedef struct Tree{ int val; Tree *left; Tree *right; //Tree(int v):val(v){}}*P_Tree;//队列typedef P_Tree Elem; //以二叉树作为列队结点元素struct Node{ Elem Data; ...原创 2018-03-22 17:45:43 · 4803 阅读 · 0 评论 -
树 - 二叉树的遍历和初始化
二叉树 4 / \ 1 7 / \ / \ 0 2 5 8 \ \ \ 3 6 9二叉树的前序、中序、后序遍历 按访问根...原创 2018-03-22 17:32:51 · 2108 阅读 · 1 评论 -
常见排序算法 -- 快速排序
#include <iostream>using namespace std;void qsort(int arr[], int left_idx, int right_idx){ if(left_idx >= right_idx){ return; } /* 调整数组 小于flag的元素,调整至左半部分 ...原创 2019-10-12 16:59:41 · 113 阅读 · 0 评论 -
常见排序算法概览
排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 选择排序 SelectSort O(n^2) O(n^2) O(n^2) O(1) 不稳定 冒泡排序 BubbleSort O(n^2) O(n^2) O(n) O(1) 稳定 插入排序 InsertSort ...原创 2019-08-28 22:48:49 · 150 阅读 · 0 评论 -
常见排序算法 -- 归并排序
#include <iostream>#include <stdlib.h>using namespace std;//[left_idx, mid_idx], (mid_idx, right_idx]//mid_idx = left_idx + (right_idx - left_idx) / 2void merge(int* arr, int left...原创 2019-10-09 15:16:40 · 105 阅读 · 0 评论