随笔分类 -  新手讲算法

一些简单的算法
摘要://分析:非递减排序数组 前面一部分 挪到后面,则形成了 两个非递减排序的数组,//而:最小的元素一定出现在 第二个非递减排序的数组中//所以这个题:我们要找出 两个非递减的边界,当 end - start == 1时,条件中指,end就是找到的元素//(1)我们用两个指针,第一个指针,指向 第一个 阅读全文
posted @ 2018-04-01 21:38 jiguojing 阅读(116) 评论(0) 推荐(0)
摘要:1.冒泡排序 (1)每次比较相邻的两个元素,按照对应的顺序进行交换 (2)遍历的次数是 n 次,每次遍历进行的比较次数 是 n次,所以复杂度 n*n (3)进行优化:如果某一次比较之后,没有一次交换,说明此时数组已经有序了 2.插入排序 (1)不停地将 数字插入到 前面已经有序的数组中 3.选择排序 阅读全文
posted @ 2018-04-01 14:27 jiguojing 阅读(158) 评论(0) 推荐(0)
摘要:1.归并排序的思想 分治 (1)对数组进行不断拆分,直到每个数组里面只有 1个元素 (2)1个元素的数组,进行合并,变成两个元素的有序数组,两个合并变成4个元素的有序数组 2.归并排序的关键在于:合并数组,掌握每次合并的数组边界 3.废话不多说,直接上代码 此方法是合并数组从前往后合并 3.2 此方 阅读全文
posted @ 2018-04-01 09:48 jiguojing 阅读(397) 评论(0) 推荐(0)
摘要:插入排序:希尔排序 直接插入排序 选择排序:简单选择排序 堆排序 交换排序:快速排序 冒泡排序 归并排序 基数排序 上述8种排序接下来都会讲到 阅读全文
posted @ 2018-01-09 22:39 jiguojing 阅读(150) 评论(0) 推荐(0)
摘要:1. 归并排序 要点: 归并排序是建立在归并操作的一种有效的算法,该算法是采用 分治法 的典型应用。 基本思想: (1)分解:将序列每次折半划分成两个数组,直到划分成每个元素一个数组 (2)合并:将划分后的序列段两两合并后排序。 2.逆数对问题 我们可以发现,其实就是要找 每个数的左边的比他大的数一 阅读全文
posted @ 2017-12-17 16:44 jiguojing 阅读(1110) 评论(0) 推荐(0)
摘要:输入一个链表,从尾到头打印链表每个节点的值。 第一种解法: (1)值放在一个数组中 (2)反转数组 第二种解法: (1)反转链表 (2)遍历一遍得到值 solution 1: solution 2: 阅读全文
posted @ 2017-06-20 23:44 jiguojing 阅读(367) 评论(0) 推荐(0)
摘要:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 阅读全文
posted @ 2017-06-19 21:50 jiguojing 阅读(1278) 评论(0) 推荐(0)
摘要:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 阅读全文
posted @ 2017-06-19 21:15 jiguojing 阅读(245) 评论(0) 推荐(0)
摘要:题目: 给你一个栈,里面若干元素,只能在额外申请一个栈,请实现栈顶到栈底的排序问题 思路: (1)一个栈stack,另一个栈help (2)int a = stack.pop(),help.empty||a > help.peek,直接helo.put(a) (3)a < help.peek(),则 阅读全文
posted @ 2017-06-08 02:00 jiguojing 阅读(239) 评论(0) 推荐(0)
摘要:题目: 一个stack放入元素之后,利用递归函数将stack逆序 思路: (1)stack:放入元素 (2)递归函数1(获取栈底元素并移除):1.弹出stack中元素result 2.获取栈底元素 3.将result放入栈,这样实现一个效果:每一次获取栈底元素,并返回,其他元素顺序不变 (2)递归函 阅读全文
posted @ 2017-06-07 00:02 jiguojing 阅读(331) 评论(0) 推荐(0)
摘要:题目: 用两个stack实现que的add,poll,peek的功能 思路: (1)stackPush:用来且只用来插入数据 (2)stackPop:用来且只用来取数据 (3)add():stackPush.push() (4)poll():执行stackPop.pop()。若stackPop为空, 阅读全文
posted @ 2017-06-06 23:21 jiguojing 阅读(270) 评论(0) 推荐(0)
摘要:题目: 实现一个特殊的栈,可以在实现栈的基础功能上,增加获取最小元素的操作 要求: pop,push,getMin操作的时间复杂度为O(1) 分析: 想要效果: 写代码: 阅读全文
posted @ 2017-06-06 22:51 jiguojing 阅读(293) 评论(0) 推荐(0)
摘要:#include #include #includeusing namespace std; void Swap(int &a, int &b){// 有可能swap同一变量,不能用异或版本 int t = a; a = b; b = t;}void RandomShuffle(i... 阅读全文
posted @ 2015-10-08 17:43 jiguojing 阅读(475) 评论(0) 推荐(0)
摘要:1.反转2.求和3.反转比较简单,就是要细心#includeusing namespace std;void bigNumAdd(char *a,char *b,char *c){ int len_a=strlen(a),len_b=strlen(b),len_c; int len=(l... 阅读全文
posted @ 2015-09-29 10:17 jiguojing 阅读(280) 评论(0) 推荐(0)
摘要:算法一:分治算法一:基本概念 分治法:分而治之,就是把一个问题分成两个或很多个相同或者相似的问题,再把子问题分成更小的子问题,直到最后子问题可以简单地直接求解,原问题的解即为子问题的解的合并,是很多算法的基础,如:快排,归并,傅里叶变换二:使用情况(1)该问题缩小到一定的规模就可以容易地解决(容易... 阅读全文
posted @ 2015-09-29 09:36 jiguojing 阅读(563) 评论(0) 推荐(0)