算法
poinsettia
这个作者很懒,什么都没留下…
展开
-
算法:前缀和
什么是前缀和一个数组的前i项的和,成为前缀和。前缀和数组给定一个数组,再定义一个数组来存放前面数组的前缀和。前缀和数组的作用当多次询问数组某个区间的和的时候,先求出前缀和,再计算,用空间换时间。sum[a, b] = sum[0, b] - sum[0, a - 1];...原创 2020-11-23 19:03:40 · 212 阅读 · 0 评论 -
快速排序优化
快速排序退化为选择排序当数据是逆序的时候,patition后每次都是1与n-1,快速排序的时间复杂度就退化为选择排序,为n2。快速排序的优化可以有效防止快速排序性能退化可以节约栈空间但平均时间复杂度不会降低#include <stdlib.h>#include <stdio.h>#include <time.h>#include <string.h>#define SWAP(a, b) { \ __typeof(a) __te原创 2020-11-22 19:21:45 · 813 阅读 · 0 评论 -
初探快速排序
基本算法流程1. 将最左边的数选择为基数,并分别将最左边和最右边赋值给左右指针(l, r)2. 移动右指针,遇到小于基准值的值,将值放入l的位置,l++3. 移动左指针,遇到大于基准值的值,将值放入r的位置,r–4. 直到左右指针相遇,将基准值放入l的位置代码实现可以作为模板保存,也要注意快排中都不要加等于号,都是 < 或者 >void quick_sort(int *num, int left, int right) { if (left > right)原创 2020-11-22 12:53:02 · 130 阅读 · 0 评论 -
普通人写的二分查找和高手写的二分查找
普通人的二分查找int primary_binary_search(int* nums, int numsSize, int target) { if (numsSize <= 0 || nums == NULL) { return -1; } if (target < nums[0] || target > nums[numsSize - 1]) { return -1; } if (target == nums[原创 2020-11-21 21:12:56 · 68 阅读 · 0 评论 -
动态规划(DP)的三个步骤
动态规划(DP)的四个步骤定义元素的含义找出数组元素之间的关系初始化数组DONE定义元素的含义常常是一维数组或者二维数组找出数组元素之间的关系初始化数组DONE...原创 2020-03-11 12:08:46 · 1141 阅读 · 0 评论 -
并查集三个主要函数
1. 定义结构体,并初始化。init2. 子集合并。joint3. 查找所属子集。 find Parent原创 2020-03-08 17:00:31 · 144 阅读 · 0 评论