简单算法
Mooneal
这个作者很懒,什么都没留下…
展开
-
简单算法之插入排序及其优化shell排序
1>插入排序:顾名思义是通过不断把新的元素插入到前面有序的序列中。 思路:1.当数组只有一个元素时,不需要排序。所以插入排序从a[1]开始; 2.当数组长度为n时,那么所要插入的元素a[1]~a[n-1],这利用for循环遍历所有需要被插入的元素 3.当a[i]小于a[i-1],那么a[i]就需要往前插入,以使得a[0-i]数组有序,而且a[i]原创 2016-09-19 20:00:15 · 432 阅读 · 0 评论 -
矩阵覆盖的解题思路
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路:错误的思路:在看到这个题的时候,想的是按照第一种方式,第一个采用2*1的形式那结果有 f(n-1),第二种开头分为 2*1 2*1 或者 1*2 1*2 所以有两种结果2f(n-2); f(n) = f(n-1)+2f(n-...原创 2018-07-18 17:25:20 · 1520 阅读 · 1 评论 -
动态规划之合唱团
问题:有n个学生站成一排,每个学生有一个能力值,从这n个学生中按照顺序选取k名学生,要求相邻两个学生的位置编号的差不超过d,使得这k个学生的能力值的乘积最大,求返回的最大乘积。输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai(-50 ...原创 2018-06-04 14:25:56 · 473 阅读 · 0 评论 -
递归的理解
递归是编程中一个相对难以理解但是却又很重要的概念. 对于从命令式语言开始学习编程的程序员天生对此有理解缺陷, 而对于从类似C++这种对函数式编程范式不友好的语言开始学习编程的程序员就更加如此了.(比如我自己) 碰巧(其实不巧)最近在读这本书(这本书国内没有引进, 网上只有巨贵的亚马逊卖的原版, 我读的是网上的中文版), Paul Graham在书中讲述的如何写递归函数的部分, 让我印象深刻. 因为转载 2017-08-27 16:39:16 · 731 阅读 · 0 评论 -
二叉树以及遍历算法
这两天看了很多关于二叉树的资料,遂来写个总结。 1>什么是二叉树?树:树不同于数组Array以及链表 List ,前面两种都是线性结构。而树是介于线性和非线性之间的半线性结构。实质上就是链表的链表,即一个节点可以发散出多条链表,形成树状结构,如下图: 那么我们如何在计算机中表达这种结构呢? 这里有一种很经典的表示法:长子+兄弟 表示法。 长子+兄弟:每个节点都有:parent域原创 2017-04-13 13:00:37 · 463 阅读 · 0 评论 -
排序算法的总结
1>冒泡排序 原理:拿相邻的数比较,如果a[i]>a[i+1] ,两者互换,那么第一轮就会把最大的数拍到最后一个。 (规模响应减小,且每一轮都可以得到正确结果) 优化:设立一个flag,把他放在每一轮最后不在交换的位置,那么在flag之后的数都是有序的。2>插入排序 原理:那一个数和他前面的数比较,如果它小于它前面的数,就把它前面的数放到它的位置上,那就空出一个位置,最终可以找到合适的位置,原创 2017-03-26 21:55:53 · 245 阅读 · 0 评论 -
出栈序列的判断,以及栈混洗。
栈:栈的结构是很简单的,简单来说就是一个先入后出的列表。 栈混洗:一个放在栈序列入中间栈再出中间栈得到一个新的栈。那么如何判断一个序列是否是出栈序列呢? 1.简单判断: 首先,我们拿一种简单情况来看 初始栈:(1,2,3] 很明显新的栈不可能是[3,1,2) 圆括号代表栈顶 从这里我们就能看出, 对于(…i,…j…..,k..],只要序列为[….k,…i,…j)那么这个序列一定原创 2017-04-08 15:10:52 · 5509 阅读 · 1 评论 -
2017网易实习编程题以及其他几个算法总结
首先,这里给自己提一个醒,能得出结果的算法才是好算法,即使不是很优化! 1.终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug。假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在(gx,gy)街道上。小易周围有多个出租车打车点,小易赶去办公室有两种选择,一种就是走路去公司,另外一种就是走到一个出租车打原创 2017-03-27 18:13:19 · 473 阅读 · 0 评论 -
数组插入问题<剑指offer>
*最近在做剑指offer,因为书上都是用c/c++实现的,我又看不懂c++,只能努力试试看用java来实现。* 题目: 有两个已经排好序的数组(假定它们是从小到大排序)A1和A2,请实现一个函数,把A2中的所有数字插入到A1中,并且所有的数字都是排序的。 思路: 因为两个数组都是排好序的,如果我们从前面逐个比较,后面的数字就要不断往后移动,且会重复移动,很明显,这样时间复杂度很大,那么我们从原创 2016-09-24 10:35:31 · 425 阅读 · 0 评论 -
GC相关问题
ps:以前看的好多书,都忘了,决定好好写博客,写总结了GC的问题大致分为三大类:1.要gc哪些对象?2.通过什么方法来gc?3.什么时候触发gc?怎样gc的?下面通过对这三个问题的思考来捋一捋gc相关的知识点: 一.要GC哪些对象?通常来说,不使用的对象,就应该被回收,怎么找到不使用的对象呢?有两种算法:引用计数法,可达性分析法。对于java语言来说,由于循环引用...原创 2018-07-19 18:32:06 · 399 阅读 · 0 评论