![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
跟左神一起学算法
没有撤退可言~
花有重开日,人无再少年
展开
-
由荷兰国旗问题推导出的快排
//快排引出的荷兰国旗问题void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}//一个问题的写法有很多,怎么想就怎么写,结果都是一样的void func(int *a, int L, int R){ int less = L - 1; int more = R; while (L < more)...原创 2019-08-09 01:18:26 · 100 阅读 · 0 评论 -
和左神一起做题:归并排序,稳定的冒泡,稳定的归并以及常见排序的空间时间稳定分析,数组到堆的过程以及演化成堆排序
//归并排序#include<stdio.h>void sort(int *a, int L, int M, int R){ int *p = new int[R - L + 1]; int p1 = L; int p2 = M + 1; int i = 0; while (p1 <= M && p2 <= R) { p...原创 2019-08-09 23:13:04 · 185 阅读 · 0 评论 -
跟左神一起做题:无序数组数组,让时间复杂度为0(N),求出排好序之后的相邻最大差值。
#include<stdio.h> int bucket(int num, int length, int max, int min) //这段代码主要就是把数组里面的每个元素分配到自己的范围的那个桶{ return (int)(num - min)*length / (max - min); //有误差但是不影响结果 //return (num - 9) / 9;...原创 2019-08-11 18:01:34 · 158 阅读 · 0 评论 -
犯瓜的总结,和左神一起练算法:桶排序之计数排序
今早犯了一次瓜,让我纠结了一个小时这里为这次的傻逼总结一次:不是昨天写了堆排序吗,早上又重新写了一便,可是发现代码没问题呀:但是为啥呢?现在就来总结一下void sort(int *a, int index, int size){ int left = index * 2 + 1; while (left < size) { int larger = (lef...原创 2019-08-11 18:17:01 · 149 阅读 · 0 评论 -
用数组实现栈和队列
//实现栈#include<iostream>#include<string>using namespace std;class zhan{public: zhan(int size) { this->a = new int[size]; this->index = 0; this->size =size; }...原创 2019-08-11 23:38:39 · 203 阅读 · 0 评论 -
和左神一起练算法:1.实现一个特殊的栈,在实现栈的基本功能的基础上,在实现返回栈中最小的元素的操作 2.如何仅用队列结构实现栈结构,如何仅用栈结构实现队列结构*
实现一个特殊的栈,在实现栈的基本功能的基础上,在实现返回栈中最小的元素的操作。要求:1.pop,push,getmin,操作的时间复杂度都是0( 1 );2.设计栈的类型可以使用现成的栈的结构。#include<iostream>#include<stack>#include<time.h>using namespace std;//templa...原创 2019-08-14 01:04:28 · 213 阅读 · 1 评论 -
和左神一起练算法:猫狗队列问题,认识哈希函数和哈希表
实现一种狗猫队列的结构,要求如下:用户可以调用add方法将cat类或dog类的实例放入队列中;用户可以调用pollAll方法,将队列中所有的实例按照进队列的先后顺序依次弹出;用户可以调用pollDog方法,将队列中dog类的实例按照进队列的先后顺序依次弹出;用户可以调用pollCat方法,将队列中cat类的实例按照进队列的先后顺序依次弹出;用户可以调用isEmpty方法,检查队列中是否还...原创 2019-08-14 23:09:27 · 157 阅读 · 0 评论 -
和左神一起练算法:设计RandomPool结构
设计RandomPool结构【题目】 设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom():等概率随机返回结构中的任何一个key。【要求】 Insert、delete和getRandom方法的时间复杂度都是O(1)。//设计RandomPool结构#...原创 2019-08-16 20:12:28 · 143 阅读 · 0 评论 -
和左神一起练算法:转圈打印矩阵,’之‘字型打印
转圈打印矩阵【题目】给定一个整型矩阵matrix,请按照转圈的方式打印它。例如:1 2 3 45 6 7 89 10 11 1213 14 15 16打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10【要求】 额外空间复杂度为O(1)。#include<iostream>using nam...原创 2019-08-17 22:58:37 · 165 阅读 · 0 评论 -
和左神一起练算法:在行列都排好序的矩阵中找数 ,打印两个有序链表的公共部分 ,判断一个链表是否为回文结构
在行列都排好序的矩阵中找数【题目】 给定一个有N*M的整型矩阵matrix和一个整数K,matrix的每一行和每一 列都是排好序的。实现一个函数,判断K是否在matrix中。例如:0 1 2 52 3 4 74 4 4 85 7 7 9如果K为7,返回true;如果K为6,返回false。【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。#include<...原创 2019-08-18 22:49:51 · 99 阅读 · 0 评论 -
跟左神一起练算法:在空间复杂度为0(1)的情况下判断链表是否为回文链表;将单向链表按某值划分成左边小、中间相等、右边大的形式
#include<iostream>#include<assert.h>using namespace std;struct push{ int value; push * next;};struct slist{ push *first;};void init(slist * l){ assert(l->first != null...原创 2019-08-20 22:56:59 · 131 阅读 · 0 评论 -
跟左神一起连算法:在时间复杂度为0(N),空见复杂度为0(1)的情况下使无序的链表,变成左小,中等,右大的结构;利用哈希表来深拷贝一个链表
将单向链表按某值划分成左边小、中间相等、右边大的形式【题目】 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整 数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于 pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。 例如:链表9->0->4->5->1...原创 2019-08-22 18:39:54 · 120 阅读 · 0 评论 -
案例分析
问题描述就是,1,12,123,1234,123456,1234567,12345678,123456789,12345678910,12345678911 …这样的一个问题,输入两个数字,代表的是,输入数据的两端,看之间有几个数字可以被3整除比如输入2 ,5的意思就是求12,123,1234,12345之间有几个数字可以被3整除,输出应该是3输入的两个数字a,b应该满足(1<= a<...原创 2019-09-18 15:12:32 · 186 阅读 · 0 评论 -
跟左神一起练算法(布隆过滤器和一致性哈希)
认识布隆过滤器//布隆过滤器和一致性哈希//布隆过滤器就是爬虫项目,和黑名单项目的常见结构//查询某一个结构是否存在于某一个集合之中落地结构:大数组结构,每一个位置是一个比特位bite布隆过滤器产生失误的原因:假如现在有100亿个URL现在你只给了10个位,4个哈希函数,每次涂黑四个位,那么这10个位注定被越图越黑,等到查找的时候,你就会发现,查啥都是错的。要是有10个URL...原创 2019-12-03 19:30:49 · 454 阅读 · 1 评论 -
跟左神一起练算法
关于上提的思路:原创 2019-12-04 20:40:24 · 106 阅读 · 0 评论 -
跟左神一起练算法(非递归实现二叉树的遍历)
前序遍历:void xianxubianli(TreeNode*& tree){ if (tree == nullptr) return; stack<TreeNode*> sta; sta.push(tree); while (!sta.empty()) { tree = sta.top(); sta.pop(); cout << ...原创 2019-12-05 10:54:44 · 126 阅读 · 0 评论 -
跟左神一起练算法(认识并查集)
介绍并查集比较清楚的文章https://blog.csdn.net/zjy_code/article/details/80634149原创 2019-12-06 15:28:02 · 217 阅读 · 0 评论 -
跟左神一起练算法(前缀树)
何为前缀树,怎样生成前缀树?这样的话在一个超长字符串数组中查找一个字符串出现的次数的时候就会非常的快。切字符串end代表的就是这个字符串在数组中出现的次数将一个元素插入前缀树的过程:假如要存入的不是英文字符的话,而是汉字,那就不需要指针数组了,可以搞一个map来进行存储在一个前缀树中查找:大致代码是这个样子:class TrieNode{public: TrieNode(...原创 2019-12-06 20:12:53 · 184 阅读 · 0 评论 -
跟左神一起练算法(图,拓扑排序,最小生成树算法)
图?无向图,有向图怎么描述一个图?邻接表法,邻接矩阵法有向图,和无向图可以统一为有向图无论是有向图还是无向图都可以按照有向图 进行表达邻接表法:邻接表法,和邻接矩阵法是最经典的两种表示方法,实际上还有很多的表示方法拓扑排序给你一张图举个例子,我们的编译器在编一个个文件的时候就是按照拓扑排序来进行的假如说编译B文件要先编译E,D文件,编译C文件需要编译D文件编译A文件...原创 2019-12-07 19:42:25 · 232 阅读 · 0 评论 -
简单题
class Solution {public: double Power(double base, int exponent) { if(base == 0) { return 0; } if(exponent == 0) return 1; double c...原创 2019-12-10 20:27:21 · 79 阅读 · 0 评论 -
跟左神一起练算法
一组数字,让你返回和为某一数字的两个元素的下标,存在一个问题,假如数组是无序的话那么就要,用一个数组记录住没排序之前的下标,自己写一个排序的方法,交换数组元素的同时也要交换,下标的值,所以要自己写排序哈希表存在的问题就是常数项操作比较大,这是由哈希表自己本身的设计引起的可以认为哈希表的增加,删除,查询时间复杂度都是o(1)这个题还有第三种要求,就是假如数组中的元素有重复的,现在假定已经是...原创 2019-12-17 16:58:26 · 122 阅读 · 0 评论 -
和左神一起练算法
判断一个字符串是不是回文的字符串这个问题的话,对于C++来说就是直接使用两个指针前后同时遍历,向中间缩进就可以了,这个是针对字符串而言的,假如是针对一个数字来说呢?让你判断这个数字是不是回文的数字第一个会想到的就是先把数字转换成字符串,但是要是遇到卡时间复杂度的系数的,这个就有点不行了考虑下里面一种写法不得不说这段代码考虑的很全面,每一个细节扣的都很严格,也就是基础很扎实bool fun...原创 2019-12-20 20:03:47 · 70 阅读 · 0 评论 -
跟左神一起练算法
这道题算是感觉非常难的一道题先跳过,后面有时间了再讨论原创 2019-12-21 01:43:15 · 59 阅读 · 0 评论 -
跟左神一起练算法
第一种解法就是将数组中的每一个字符串按照ASCII进行排序,变形词之间的排序结果肯定是一致的,假如出现了新的排序,那就新建一个链表,每次新出现一个没有的排序,那么就新建一个链表来存放,把ASCII排序相等的单词放到一个链表中,最后再将每个链表连接起来返回,就可以了。...原创 2019-12-23 02:46:42 · 113 阅读 · 0 评论