![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 62
dugu618
这个作者很懒,什么都没留下…
展开
-
MAZE
A M × N square maze,0 means road while 1 means wall, find a way from entrance to exit, this maze which base on two-dimensional array has 4 directions(right,left,up,down)by the way, the maze st...原创 2017-09-06 11:15:48 · 398 阅读 · 0 评论 -
归并排序
归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并java 实现:package array;// 归并算法 有递...原创 2013-08-19 16:46:07 · 77 阅读 · 0 评论 -
堆排序 java实现
难得一个周五,没有什么事情,我于是用java 写了一个堆排序算法,忙活了很长时间,觉得自己写的不错的时候,问问 同事——可,可很easy写了出来,我仔细学了学他的思路,不错,比我的好,我特别留下的代码,今后学习使用: 先介绍一下堆排序: 1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i...2013-08-16 17:20:10 · 73 阅读 · 0 评论 -
逆波兰表示法计算
题目:求值逆波兰表示法逆波兰表示法:逆波兰记法中,操作符置于操作数的后面。例如表达“三加四”时,写作“3 4 +”,而不是“3 + 4”。如果有多个操作符,操作符置于第二个操作数的后面,所以常规中缀记法的“3 - 4 + 5”在逆波兰记法中写作“3 4 - 5 +”:先3减去4,再加上5。使用逆波兰记法的一个好处是不需要使用括号。例如中缀记法中“3 - 4 * 5”与“(3 - 4)*5”不...2014-05-03 17:35:21 · 282 阅读 · 0 评论 -
包含最大体积水的容器
已知:有n个非负整数数a1,a2,a3,a4,a5……an,每个数都代表一个一个点(i,ai),其中ai是点i的高度,有n个垂线,每个垂线的高度是ai,位于x轴i上,一个容器由x轴和任意两个垂线组成,求最大的容器能装多少水? 分析,这个题目其实不是很难,如果使用2层for循环,肯定能做出来,但是如果加深点难度,我们这么能在O(n)的时间内,找到答案了,发散思维了,对了,就是从两头开始找,...2014-04-30 00:17:00 · 145 阅读 · 0 评论 -
最长合法括号的长度
题目:已知一个字符串s,仅有'(' 和 ')'构成,求最长完全配对的子串长度。(就是()配对成功).比如说:"(()", 最长完全配对的字串长度是"()" ,长度为2。")()())"丁的最长完全配对的字串长度是"()()" ,长度是4。解题思路,当时有两种解题思路,第一种是,使用栈,把(的数组中的位置放到栈中,遇到)出栈,并且统计长度,最后检查栈,如果栈是空的,放回当前长度,如果栈...2013-11-27 13:57:11 · 204 阅读 · 0 评论 -
下一个排列
题目:已知一个排列,按照字典排序的方式查找大于当前排列的下一个排列,若当前排列没有比它更大的排列后,返回这个排列的最小排列(其实就是升序)。要求:不得申请额外的空间下面的举例说明下,(左边的是输入的排列,右边的输出的排列)1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解题感悟:说了半天就是初中学过的排序的,找到一个比当前大的下个排序,要是人去做的...2013-11-26 14:27:03 · 123 阅读 · 0 评论 -
不使用乘法,除法,和取余运算计算两个int型的除法
题目:不使用乘法,除法,和取余运算计算两个int型的除法思路:既然不让用乘法,除法,只能回归小时候做除法题的解题方法了,理论上可以用cpu的计算除法的方式,来计算,这只是一个思路,我不会,回到最初的方法吧, 如果你是手工做除法的话,那和十进制是一样的办法。 好了,我们现在需要做的事情就是模拟这种情况了 首先,保证全是正数,如果是负数的话,按照正数处理,返回一个负数就...2013-11-25 16:19:44 · 884 阅读 · 0 评论 -
删除元素
题目:已知一个数组A,和一个值elem,需要把数组中的elem值全部删除,并且返回删除后的数组长度。为删除前数组的顺序可以任意改变的。思路:先把数组进行排序,然后用2分查找的方法找到,需要删除值的位置,因为是2分法,所以它的前后都有可能有重复的,需要在往前后便利,找到相同的值后,用后面的数组覆盖这些重复的值就行了。public int removeElement(int[] A, int...2013-11-25 10:31:39 · 156 阅读 · 0 评论 -
删除排序数组中的重复数据
题目:已知一个排序int数组,删除数组中的重复的数据,使得数组中每个元素只出现一次,返回新的数组的长度要求,不要使用额外的空间,不能new出新的空间。 思路:其实题目不是很难,数组已经是遍历好了的,所以如果出现重复的话,那么重复的数据一定是相邻的,所以,根据这个思想,我们可以遍历数组,找到当前值和下一个值是相同的,并且纪录下重复的情况,让数组的总长度,减去重复度,就是题目的要求了...2013-11-22 10:31:19 · 107 阅读 · 0 评论 -
快速排序
快速排序介绍快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 原理:设要排序的数组是A[0]……A[N-1],首先任...原创 2013-08-20 10:00:13 · 94 阅读 · 0 评论 -
希尔排序
希尔排序希尔排序原理: 希尔排序是D.L.Shell于1959年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是O(n2)的,希尔排序 算法是突破这个时间复杂度的第一批算法之一。 我们前一节讲的直接插入排序,应该说,它的效率在某些时候是很高的,比如,我们的记录本身就是基本有序的,我们只需要少量的插入操作,就可以完成整个记录集的排序工作,此时直接插入很高效。...原创 2013-08-20 15:26:05 · 103 阅读 · 0 评论 -
插入排序
插入排序 插入排序概述:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部...原创 2013-08-20 16:30:10 · 94 阅读 · 0 评论 -
反转一个Stirng中的单词
题目:有个String串,按照单词一个一个反转,比如:输入为s = "the sky is blue",输出为 "blue is sky the".注意:1.有多个空格在两个单词中间,按照一个空格处理2.如果在字符串的前端,后端都包含空格的话,反转后,不能在开头和结尾处包含空格的3.输入的也可能只有一个单词。 思考:单词是保持顺序的,单词在句子中的位置发生改变,很容易...2014-04-27 10:39:30 · 118 阅读 · 0 评论 -
删除有序列表中重复的数据
已知存在一个排序链表,删除所有重复数据,保证每个元素只能出现一次。例如:已知: 1->1->2, 返回 1->2.已知1->1->2->3->3, 返回 1->2->3.思路:遍历链表,保存一个中间值,如果和当前的值相等的,不保存,不等,才保存。/** * Definition for singly-linked li...2015-08-17 23:37:10 · 376 阅读 · 0 评论 -
查找数组的插入位置
题目:已知一个排序数组和一个目标值,如果目标值能够在数组中找到,返回目标值在数组的位置,如果不能找到,那么返回,数组插入这个数后,这个数的位置例如: [1,3,5,6], 5 → 2[1,3,5,6], 2 → 1[1,3,5,6], 7 → 4[1,3,5,6], 0 → 0 解题,使用二分法查找位置,这样比较快,其实一个个去找也行,就是速度比较慢 public i...2014-04-25 00:24:26 · 181 阅读 · 0 评论 -
两个数字相加
两组用链表储存的非负数字,数字反序存储,每个链表节点存放一个数字,求两组数字相加之和,并用链表表示,例如: 输入: (2 -> 4 -> 3) + (5 -> 6 -> 4) 输出: 7 -> 0 -> 8 分析: 其实就是平时的加法运算反序表示,大体思路是:分别相加对应位置上的数字,判断是否大于10,如果大于10,减去10,并...原创 2013-11-01 16:16:49 · 271 阅读 · 0 评论 -
没有重复字母的最长子串长度
提供一个字符串,计算最长不包含重复字母的子字符串的长度:例如"abcabcbb" 最长没有重复字母的子串是"abc",长度为3,"bbbbb"最长的没有重复字母的子串是1; 思路是: 将字符串转换成字符数组,然后逐一添加到list中,如果list包含了这个字符,求此时的list长度,如果,大于之前的子串的长度,将最大长度设置为此子串的长度,并...原创 2013-10-31 11:58:25 · 135 阅读 · 0 评论 -
Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up to the targ...2013-10-23 14:26:36 · 75 阅读 · 0 评论 -
计数排序
// 来自《算法导论》计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数,当 k = O(n)时,计数排序的运行时间为O(n)。计数排序的基本思想就是对每一个输入元素x,确定出小于x的元素个数,有了这一信息就可以把x直接放到它最终在输出数组中的位置。维基百科:http://zh.wikipedia.org/zh-cn/计数排序大致过程:1、申请一个长...2013-08-21 13:47:23 · 88 阅读 · 0 评论 -
冒泡排序
冒泡排序 冒泡排序(Bubble Sort,台灣譯為:泡沫排序或氣泡排序)是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。冒泡排序對個項目需要O()的比較次數,且可以原地排序。儘管這個演算法是...原创 2013-08-20 17:06:48 · 82 阅读 · 0 评论 -
选择排序
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至...原创 2013-08-20 16:51:58 · 66 阅读 · 0 评论 -
合并k个有序的list
题目:已知有k个有序的list, 将这k个list合并成一个有序的lists,注意分析考虑它的效率思路:k个list都是有序的,这样就可以逐一比较了,设置已经排序好的为move,等待加入的为current,每次都一动move,如果遇到,current介于move和move的下一个节点之间,将已经遍历好的move, 和current当前换位,继续,move被截断的当做新的current,直到...原创 2013-11-20 16:47:45 · 190 阅读 · 0 评论 -
验证括号配对
题目: 已知一个string 类型字符串s,s仅仅由'(', ')', '{', '}', '[' 和 ']'组成根据以下法则来判断字符串是否合法:括号类型必须完全配对, "()" 和 "()[]{}"是合法的,但是"(]" 和 "([)]"是非法的思路:既然需要配对,后进的需要先出,我们想到栈就是不错,满足要求,以下是java代码public boolean isValid(S...2013-11-19 15:09:15 · 93 阅读 · 0 评论 -
删除list倒数第n个元素
题目:有一个链表,删除倒数第n个节点,并返回该链表的头节点。例如:由一个链表 1->2->3->4->5, 设n = 2.那么删除倒数第二个节点后 就是1->2->3->5. 注意:1.n总是合法的; 2.只遍历一次链表的结构如下: public class ListNode { public int val;...2013-11-18 15:16:44 · 433 阅读 · 0 评论 -
面积最大的全1子矩阵
题目描述:在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多。 输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行是两个整数m、n(1<=m、n<=1000):代表将要输入的矩阵的大小。矩阵共有m行,每行有n个整数,分别是0或1,相邻两数之间严格用一个空格隔开。 ...原创 2013-05-19 21:59:22 · 121 阅读 · 0 评论 -
最大值最小化
题目描述:在印刷术发明之前,复制一本书是一个很困难的工作,工作量很大,而且需要大家的积极配合来抄写一本书,团队合作能力很重要。当时都是通过招募抄写员来进行书本的录入和复制工作的, 假设现在要抄写m本书,编号为1,2,3...m, 每本书有1<=x<=100000页, 把这些书分配给k个抄写员,要求分配给某个抄写员的那些书的编号必须是连续的。每个抄写员的速度是相同的,你的任务就...原创 2013-05-19 21:58:47 · 92 阅读 · 0 评论 -
项目安排
题目描述:小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行...原创 2013-05-19 21:58:14 · 77 阅读 · 0 评论 -
寻找表达式
题目描述:现在有一个序列123......N,其中N介于3和15之间,要求在序列之间加入+、-或者空格,使得该序列组成的数学表达式的运算结果为0。 输入:输入可能包含多个测试样例。对于每个测试案例,输入整数N(3<=N<=15),代表这个序列的长度。 输出:对应每个测试案例,输出所有使得表达式结果为0的组合,当有多个组合时,按字典序进行...原创 2013-05-19 21:56:24 · 106 阅读 · 0 评论 -
判断括号匹配
判断括号匹配:package suanfa;import java.util.Scanner;public class checkparahencepair { public boolean chechmatcher(char a,char b){ if(a=='('&&b==')') return true; if(a=...2013-05-15 16:18:56 · 123 阅读 · 0 评论 -
将数组按照奇偶顺序排列
给定一个数列A,试将其变为奇数在左偶数在右的形式。例如A=[12,8,7,5,6,11],则变换后的A'=[11,5,7,8,6,12]只需要先奇数后偶数即可,不需要排序。 java实现:package suanfa;import java.util.Random;public class partarray { public int[] createa...原创 2013-05-15 10:25:31 · 657 阅读 · 0 评论 -
字符串中找到第一个只出现一次的字符
java 版本:package suanfa;import java.util.Iterator;import java.util.LinkedHashMap;public class findthefirstchar { public char findchar(String str){ LinkedHashMap<Character,...原创 2013-05-14 16:48:45 · 94 阅读 · 0 评论 -
反序链表java 表示
节点的java表示:package suanfa;public class Node { private Object value; private Node next; public Object getValue() { return value; } public Node getNext() { return next; } pu...原创 2013-05-14 14:58:56 · 81 阅读 · 0 评论 -
reverse the word
package test; import java.util.Scanner; public class arraytest { public static char[] getcharmethod(String a) { char[] test = a.toCharArray();return test; } public static ch...原创 2013-04-05 16:24:56 · 147 阅读 · 0 评论 -
替换字符串中的空格
package suanfa;public class replacespace { public static String replace(String s,String b){// char[] result=s.toCharArray(); int addlenth=b.length()-1; int count=0; for(char m:s....原创 2013-05-28 13:48:37 · 85 阅读 · 0 评论 -
有序数组中数字出现次数
给定一个单调递增有序数组A,给定一个数字N,试给出一个算法得到A中该数字N出现的次数。package suanfa;public class findcountofnumber { public static int countnumber(int[] a, int b) { int left = 0; int right = a.length - 1; i...原创 2013-05-28 16:27:32 · 227 阅读 · 0 评论 -
从1到n之间的数字1出现的次数
给定一个数N,求出1-N之间的数字有多少个1,例如N=11时结果为4(只有1,10,11含1)经典问题。 java 实现package suanfa;public class FindNumber { public static int countNumber(int n){ int factor=1; int cur=0; int high=0;...原创 2013-05-29 11:09:32 · 151 阅读 · 0 评论 -
数组数字加一运算
题目: 有一个用int数组表示的数字 digits, 求digits 加一运算后的int数组?例如 :digits ={1,0} , 加一运算后就是 {1,1}; digits= {9,9}, 加一运算后就是{1,0,0}思路:一般情况下,直接使用digits[digits.length-1]++,就可以了,但是如果末尾是9的话,必须给这个数字前一位加1,最麻烦就是第一位也是9,...2013-11-18 11:16:44 · 484 阅读 · 0 评论 -
数字反转
反转一个int型数字,例如 例子1: x = 123, return 321例子2: x = -123, return -321这个题目看起来比较简单,可是真正实现的时候总是有一些情况没有考虑到:如果输入的数字是0结尾的,比如10,100,1000……,那么应该输出什么呢?如果输入的数字没有超过int的范围,但是反转后就超过了,怎们办?其实需要增加一个参数等等,这里部探讨这...原创 2013-11-15 16:16:56 · 147 阅读 · 0 评论 -
Z字形模式转换
题目:有一个字符串 "PAYPALISHIRING",它将使用Z字形模式转换成如下的方式: P A H NA P L S I I GY I R一行一行读,"PAHNAPLSIIGYIR"请写出一个函数,它的输入参数有两个,一个是需要转化的字符串s,一个是行数n,string convert(string text, int nRows);输入...2013-11-15 16:00:11 · 222 阅读 · 0 评论