算法
killer__
这个作者很懒,什么都没留下…
展开
-
快速排序的三种划分算法
#include<vector>#include<iostream>#include<time.h>using namespace std;int partition_1(vector<int> &nums,int le,int ri){ //来回填坑法 if(le>=ri){ return le;...原创 2020-02-08 02:51:23 · 666 阅读 · 0 评论 -
链表中环的入口节点题目的双指针解法证明
头节点Head,快指针fast,慢指针slow。初始快慢指针都等于Head,slow一次走一格,fast一次走两格。另外我们现在要达成共识,first_meet节点一定在环内部,即相遇的地方一定是在环里面的某处。能理解再往下看。快慢指针第一次相遇时,假设都等于first_meet,即二者在first_meet节点相遇。那么二者第一次相遇一定是因为快指针把慢指针套圈了,即fast比slow多走...原创 2019-12-07 21:55:44 · 197 阅读 · 0 评论 -
归并非递归、快排递归及非递归的C++实现及时间效率对比。。
今天看剑指offer突然发现下学期都要去面试了,还没自己实现过快排非递归和归并非递归,这怎么能行呢,于是就写了一下。(虽然有点卡壳,又回去翻了下算导,还是顺利写出来了)#pragma warning(disable:4996)#include <iostream>#include <string>#include <cctype>#include&l...原创 2019-10-31 02:22:54 · 308 阅读 · 0 评论 -
标准二分写法
该写法最大的优势就是不必考虑返回left还是right,因为条件是while(le<ri)题目:704. 二分查找1:若中位数是左中位数,那么判断排除左半部的语句,一定要排除左中位数,不然两个元素的时候,左中位数就是首元素,会死循环。样例:class Solution {public: int search(vector<int>& nums, int ...原创 2019-10-07 01:39:36 · 333 阅读 · 0 评论 -
找数组中重复的数字
def func(tmp): for j in range(len(tmp)): i=j while tmp[i]!=i: if tmp[tmp[i]]==tmp[i]: return tmp[i] else: x=tmp[i] tmp[i],tmp[x]=tm...原创 2019-09-11 23:52:04 · 115 阅读 · 0 评论 -
C++算法导论第九章O(n)期望选择序列第i小的数字
#include<iostream>#include<vector>#include<algorithm>#include<time.h>using namespace std;int randomized_partition(vector<int>& vec, int le, int ri){ if (le == ...原创 2019-07-16 14:42:09 · 159 阅读 · 0 评论 -
【算法导论】最大子数组问题
参考https://www.cnblogs.com/jclian91/p/9151120.html1.暴力算法 O(n^2)def maximum_subarray_1(nums): siz=len(nums) res=0 for i in range(siz): sum=0 for j in range(i,siz): ...原创 2019-07-07 15:10:47 · 136 阅读 · 0 评论 -
常用排序算法的C++实现
放假没事干,复习复习,有空再用python写一遍#include<iostream>#include<math.h>#include<vector>#include<time.h>using namespace std;//冒泡排序void BubbleSort(vector<int>& vec){ in...原创 2019-07-05 00:50:45 · 329 阅读 · 0 评论 -
Leetcode 77. 组合
回溯算法Python:class Solution: def combine(self, n: int, k: int): res=[] cur=[] self.recur(n,k,1,res,cur) return res def recur(self,n,k,cur_index,res,cur): ...原创 2019-05-22 19:52:35 · 132 阅读 · 0 评论 -
C++索引从0开始的堆排序算法实现
最近算法群里有人问堆排序的问题,我一想没想出来,就又看看算法导论堆排那章,跟着敲了一遍,感觉印象算是深刻了一些。堆排序的几个函数:1.maxheap(nums[ ],int i)首先我们数组从1开始编号,为了方便。即i为父节点,nums[i]的左右孩子分别为2i和2i+1,算算对不?这个函数假设i的左右子树都已经为最大堆,只有nums[i]这个根节点可能有问题,下面上代码:void max...原创 2019-04-16 21:46:54 · 375 阅读 · 0 评论 -
关于KMP的next函数的原理分析
KMP是上学期学数据结构时候学的,当时就没学太明白,后来又自己琢磨了几次,但始终是一知半解。今天起床了又想起来KMP,以下是思考得到的一点东西。首先学过kmp的都知道要写两个函数,一个计算next数组,一个kmp主体函数,那么next数组里存的到底是啥呢。首先答案是:next[i]存的是字符串[0,i]的前后缀最长公共长度。下面先解释下前后缀。引用张别人的图:也就是说只有一个元素时候前后缀...原创 2019-03-28 19:56:33 · 656 阅读 · 1 评论