算法基础
Coding江
IT职场人
展开
-
在算法导论中,我们如何寻找第k小
一般的方法是排序后输出,这样的方法复杂度是O(nlogn) 但我们可以不必排序到最后,可以设计一种概率性算法,在多数情况下可以不用完全排序就可以知道第k个元素。 这是一种随机的方法。结合快速排序来理解。快速排序中,中间元的位置是确定的。就比如{3,2,1,4,5}我们选择3为中间元进行分治,排序第一趟后数组变成{2,1,3,4,5}3的位置在第一躺时固定。如果我们找的是第3大元素时,这种方法第...原创 2020-02-09 15:27:36 · 217 阅读 · 0 评论 -
leetcode 0004. 寻找两个有序数组的中位数
思路:在有序序列中找第n小和第n+1小(n,n1),当size1+size2为偶数时返回n小,否则返回(n+n1)/2,用两个指针记录遍历的两个数组的当前位置。 class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) ...原创 2020-01-30 16:50:45 · 147 阅读 · 0 评论 -
leetcode 0003 无重复字符的最长子串 - 提高leetcode中算法运行效率的一个技巧
今天在刷leetcode的时候刷了一个题目https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/ 看看结果:优化前 优化后: 思路差不多,都是用一个数记字串起始,用一个数记结束。下面是写在一个函数里和分开两个函数写时效率的区别。 其实返回来返回去,内存和...原创 2020-01-29 22:43:46 · 175 阅读 · 3 评论 -
算法基础【3】差分与前缀和
差分和前缀数组,举个简单的例子 a[5]={1,2,3,4,5}; b[5]={1,3,6,10,15}; 其中 b[1]=a[0]+a[1]; b[2]=a[0]+a[1]+a[2]; ...... 这样的数组关系中, a就是b的差分数组 而b就是a的前缀和数组原创 2017-12-19 14:58:31 · 2048 阅读 · 1 评论 -
算法基础【1】 变量 数组 动态内存 魔数 宏
变量就是用来存取数据的容器交换数据:int a,b; int temp; temp=a; a=b; b=temp; 数组是一串连续的内存声明数组:int a[10]; int a[10]={0}; //全部初始化为0 int a[10]={1,2,3,4,5,6,7,8,9,10}指针是变量在内存中的地址,通过指针可以间接访问到数据动态内存:int *a=new int [10];动态内存在堆中数...原创 2017-11-29 11:22:32 · 1764 阅读 · 0 评论 -
算法基础【2】OJ网站整理
名校OJ(排名不分先后): 大连理工大学:http://202.118.67.200:7217/codesheaven/contest.php?cid=1035 杭州电子科技大学:http://acm.hdu.edu.cn/showproblem.php?pid=2602 北京大学:http://poj.org/ 上海交通大学:htt原创 2017-12-12 15:02:50 · 2002 阅读 · 0 评论 -
算法基础【4】 快速乘方运算和矩阵快速幂
单纯的乘方:(运用位运算的好处就是增加运算速度) ll POW(ll num,ll k)//num的k次方 { ll ans=1; while(k>0) { if(k&1)ans*=num; num=num*num; k>>=1; } return ans; } ...原创 2018-04-10 20:06:26 · 2988 阅读 · 0 评论 -
算法基础【5】Fibonacci 数列
斐波那契数列f(n)=f(n-1)+f(n-2)代码:#include<stdio.h> #include<iostream> #include<string.h> using namespace std; long long f[2000]; int main() { int n; memset(f,0,sizeof(f)); f[0]...原创 2018-04-17 20:12:38 · 1646 阅读 · 0 评论 -
算法基础【6】单源最短路径——详解Bellman-Ford、迪杰斯特拉算法
首先我们构造研究对象:计算从V0开始到所有节点的最短路径1、dijkstra,D算法首先我们将需要计算最小路径的入口点的Cost复制到一个D数组里。(邻接矩阵对应的行)我们知道第一个节点到达的各个顶点所需的花费(路程)(无法到达花费是正无穷)找到最近的那个点。存下来(如果我要从已更新的点集中迈出第一步,那么我至少要走多远。)我们有了两个已知的节点作为中介,当更新第三个点的时候,我们就有了一个中转节...原创 2018-04-30 14:25:17 · 740 阅读 · 0 评论