算法
陶程
这个作者很懒,什么都没留下…
展开
-
[算法]很特别的一个动态规划入门教程
转载自http://www.cnblogs.com/sdjl/articles/1274312.html通过金矿模型介绍动态规划 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如转载 2016-05-23 20:11:30 · 2919 阅读 · 0 评论 -
[算法]判断一个链表是否有环
如何判断一个链表是否有环解题思路: 定义两个指针fast和slow,其中fast是快指针,slow是慢指针,二者的初始值都指向链表头,slow每前进一步,fast每次前进两步,两个指针同时向前移动,快指针每移动一次都要和慢指针比较,直到当快指针等于慢指针为止,就证明这个链表是带环的单向链表,否则,证明这个链表是不带环的循环链表(fast先行到达尾部为NULL,则为无环链表)。代码实现如下:pu原创 2016-05-06 21:05:43 · 2175 阅读 · 0 评论 -
[算法]实现单链表的反转
实现链表的反转解题思路: 为了正确反转一个链表,需要调整指针的指向。举例说明,例如i,m,n是三个相邻的结点,假设经过若干步操作,已经把结点i之前的指针调整完毕,这些结点的next指针都指向前面一个结点。现在遍历到结点m,当然需要调整结点的next指针,让它指向结点i,但需要注意的是,一旦调整了指针的指向,链表就断开了,因为已经没有指针指向结点n,没有办法再遍历到结点n了,所以为了避免指针断开,原创 2016-05-06 18:32:07 · 3319 阅读 · 0 评论 -
[算法]找出单链表中的倒数第k个元素
找出单链表中的倒数第k个元素解题思路: 为了求出链表中的倒数第k个元素,最容易想到的方法是首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第k个,转换为正数第n-k个,接下去遍历一次就可以得到结果。不过这种方法需要对链表进行两次遍历,第一次遍历用于求解单链表的长度,第二次遍历用于查找正数第n-k个元素。 如果沿从头至尾的方向从链表中的某个元素开始,遍历k个元素刚好到达链表尾,那么元素原创 2016-05-06 16:12:23 · 8011 阅读 · 1 评论 -
[数据结构]链表的基本操作
链表可以用任意一组存储单元来存储单链表中数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素ai的值以外,还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素ai的存储映像称为结点。N个结点链在一起被称为链表,当结点只包含其后继结点的信息的链表就被称为单链表。链表定义如下数据类来存储结点信息:public class Node { Node next = null;原创 2016-05-06 12:19:24 · 3058 阅读 · 0 评论 -
[算法]删除字符串中重复的字符
如何删除字符串中重复的字符问题描述: 删除字符串中重复的字符,例如,”good”去掉重复的字符串后就变成”god”。第一种方法: “蛮力法”,最简单的方法就是把这个字符串看作是一个字符数组,对该数组使用双重循环进行遍历,如果发现有重复的字符,就把该字符置为’\0’,最后再把这个字符数组中所有的’\0’去掉,此时得到的字符串就是删除重复字符后的目标字符串。代码如下:package 删除字符原创 2016-05-08 12:12:55 · 9809 阅读 · 0 评论 -
[算法]判断两个字符串是否由相同的字符组成
如何判断两个字符串是否由相同的字符组成题目描述: 由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的,只是排列顺序不同而已。例如”aaaabbc”与”abcbaaa”就由相同的字符组成的。方法一: 排序法,将两个字符串中的字符排序,比较两个排序后的字符串是否相等。若相等则表明它们是由相同的字符组成的,否则,表明他们是由不同的字符组成的。import java.util.A原创 2016-05-07 14:57:32 · 10662 阅读 · 0 评论 -
[算法]求栈中最小元素
如何用O(1)的时间复杂度求栈中最小元素解题思路: 我们经常会采用空间换取时间提高时间复杂度。我们可以使用两个栈结构,一个栈用来存储数据,另一个栈用来存储栈中的最小元素。思路如下:如果当前入栈的元素比原来栈中的最小值还小,则把这个值压入保存最小元素的栈中;在出栈时,如果当前入栈的元素恰好为当前栈中的最小值,保存最小值的栈顶元素也出栈,使得当前最小值变为其入栈之前的那个最小值。实现代码如下:pa原创 2016-05-07 09:46:03 · 3578 阅读 · 0 评论 -
[算法]如何实现栈
如何实现栈 采用数组和链表两种方式来实现栈数组实现栈,代码如下:package 如何实现栈;import java.util.Arrays;public class MyStack<E> { private Object[] stack; private int size; //数组中存储的个数 public MyStack(){ stack = ne原创 2016-05-07 09:19:49 · 2562 阅读 · 0 评论 -
[算法]微信红包
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。 给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。测试样例: [1,2,3,2,2],5 返回:2package 微信红包;import java.util.Arrays;public c原创 2016-03-31 16:03:23 · 1884 阅读 · 0 评论 -
[算法]小球的距离
小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果。刚开始做这个题收到了括号里 数字都为整数 的误导,以为 落地距离是5米,弹起后2米(5/2自动取整)。算出来结果不对,变小了。所以,原创 2016-04-05 21:24:27 · 2590 阅读 · 0 评论 -
[算法最优]设计一个有getMin功能的栈
题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。要求:1、pop、push、getMin操作的时间复杂度都是O(1) 2、设计的栈类型可以输用现成的栈结构首先看下我写的,思路大概就是用两个栈,一个栈用于自定义栈的弹出,压入,辅助栈用于存放最小值,当压入第一个栈的时候,会判断辅助栈是否为空,如果为空也压入,如果不为空,就比较,如果小于等于辅助栈的第一个值,就压入。原创 2016-04-10 14:48:04 · 2463 阅读 · 0 评论 -
[算法]矩阵的基本运算(Java实现)
直接贴代码:package 基本矩阵运算;public class BasicMatrixMath { public final static int OPERATION_ADD = 1; public final static int OPERATION_SUB = 2; public final static int OPERATION_MUL = 3; /**翻译 2016-02-29 22:35:29 · 6807 阅读 · 0 评论 -
[算法]年终奖
小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。 给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0原创 2016-04-05 21:42:57 · 2759 阅读 · 2 评论