
算法
数据挖掘者
热爱大数据,对算法感兴趣,博客里写我对算法的理解。
展开
-
杭电ACM 第106题 Tick and Tick
杭电ACM 第106题 Tick and Tick1006题目的意思是: 一个钟的三个指针在不停的转动,他们已经厌烦了这样,当他们互相的距离角度大于等于D时,他们会很开心,问一天之中他们happy的时间占总时间的概率。这题想了好久,才搞明白它的含义。使用JAVA来实现这道题。import java.util.Scanner; import java.math.BigDecimal;原创 2016-06-28 16:18:13 · 920 阅读 · 1 评论 -
python 实现在无序数组中找到中位数
一,问题描述1,求一个无序数组的中位数, (若数组是偶数,则中位数是指中间两个数字之和除以2,若数组是奇数,则中位数是指最中间位置。要求:不能使用排序,时间复杂度尽量低2, 例如: lists = [3, 2, 1, 4] , 中位数为 = (2+3)/2 = 2.5 lists = [3, 1, 2] , 中位数为 23, 算法思想: ...原创 2019-07-16 21:32:11 · 4660 阅读 · 1 评论 -
LeetCode 143 Reorder List
一,问题描述1,给一个单链表L: L0->L1->…..->Ln-1->Ln 。 重新排序成L: L0->Ln->L1->Ln-1->L2-Ln-2. 值得注意的是,您必须在不改变结点值的情况下执行此操作的。2, 解题思路如下: 首先先把单链表从中间切开,分为左右两个子链表。 然后,对右子链表进行逆序。 最后,把两个左右子链表进行合并起来,就可以原创 2017-03-16 18:23:17 · 330 阅读 · 0 评论 -
Leetcode 147 Insertion Sort List(插入排序列表)
一,问题描述1,使用插入排序方法来对单链表进行排序2,解题思路: 为了使得插入结点更加方便点,我们在单链表的头结点增加一个新结点(该新结点作为第一个结点)。然后,从第二个结点与下一个结点进行比较,如果下一个结点小于第二个结点的话,则把下一个结点从单链表取下,然后插入到第二个结点之前的已经排序好的结点中取,依次类推。最终使得单链表有序。二,AC了的程序(Java实现的)1, 第一种方法i原创 2017-03-15 21:44:10 · 634 阅读 · 0 评论 -
循环单词
一,问题描述: 1,如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。例如:picture和turepic就是属于同一种循环单词。现在给出n个单词,需要统计这n个单词中有多少种循环单词。2,输入格式: (1) 输入包括n+1行; (2) 第一行为单词个数n(1<=n<=50) (3) 接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50原创 2017-03-09 11:34:26 · 2536 阅读 · 0 评论 -
Java排序算法---->归并排序算法
一,归并排序算法 1,归并排序的基本思路就是把数组分为两组A和B,如果这两组组内的数据都是有序的,那么就可以很方便的将这两组数据进行排序了。如果让这两组组内数据有序? 2,可以将A,B组各自再分成两组,依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的两个小组就可以了。这样通过先递归的分解数列,再合并数据就完成了归并排序。 3,归并排序算法是一种稳定的原创 2017-03-16 10:33:09 · 333 阅读 · 0 评论 -
Leetcode 150 Evaluate Reverse Polish Notation (求值逆波兰表达式)
一,问题描述 1,用逆波兰表达式法去计算算术表达式的值。其中,有效运算符为+,-,*,/。每个操作数可以是整数或者另一个表达式2,例如: 3,解题思路: 先定义一个栈用来存放数据的,然后对字符串数组进行从左到后进行扫描,如果遇到的是字符串符号(+,-,*,/),则从栈中取出两个整数进行符号操作的,再把结果放回栈中,如果遇到的是字符串整数,直接存放在栈中去,一直到字符串数组全部扫描完。二,A原创 2017-03-17 21:18:11 · 728 阅读 · 0 评论 -
Leetcode 6 ZigZag Conversion
一,问题描述 ZigZag问题可以举个例子: 当输入原字符串和行数后,求ZigZag后的字符串。二,通过上述观察,我们总结一下 1,当rows=3时,0,1,2,3组成的长度是2*rows-2(即长度为4)。 当rows=4时,0,1,2,3,4,5组成的长度为2*rows-2(即长度为6)。 因此,每一轮的长度为size=2*numRows-2。2,除了第一行原创 2016-09-20 17:05:16 · 349 阅读 · 0 评论 -
快速排序
一,快速排序的介绍 1,快速排序的时间复杂度为O(nlogn),在几种排序算法中效率是最高的,经常被采用。 2,快速排序它采用的是一种分治的策略。通常称为分治法。二,快速排序的基本思想: 1,先从数列中取出一个数作为基准数。 2,分区过程,将比这个数大的数全放到它的右边,小于或者等于它的数全放到它的左边。 3,再对左右区间重复第二步,直到各个区间只有一个数。三,快速排序的程序public原创 2016-08-25 09:33:49 · 528 阅读 · 1 评论 -
杭电 1023 Train Problem II
一,题目的意思:就是在堆栈中严格递增进入堆栈,问有多少种出栈顺序。 严格递增就是按照12345进入堆栈,而不是按照21345的顺序进入堆栈中。二,解题思路:采用卡特兰数方法来解决这题,另外要使用BigInteger来进行操作,而不能使用int数据类型来进行操作 1,这题,要是能想到卡特兰数方法的话,不难的。 2,卡特兰数的公式为: F(0)=1 F(1)=1 F(2)=2原创 2016-07-14 22:43:20 · 711 阅读 · 0 评论 -
杭电 1012 u Calculate e
这题计算不是太难,是简单数学计算,不过值得注意,就是保留小数点后九位,不能使用float数据类型,因为float数据类型只能存放小数点后八位。应该使用Double数据类型,另外使用DecimalFormat deci=new DecimalFormat(“0.000000000”);这样就可以保留小数点后九位。 使用Java来解决这一题,已经AC了。import java.text.De原创 2016-07-02 15:09:00 · 349 阅读 · 0 评论 -
杭电ACM 1021题
一,题目的意思,就是F(0)=7,F(1)=11, F(n)=F(n-1)+F(n-2), (n>=2) 求F(n)能否被3整除,如果能被3整除的话,则直接输出yes,不能被3整除的话,直接输出no二,解题思路,不能使用递归,否则超时 可以发现规律,就是F(n)以4为一个周期,依次循环。所以不要用递归来做这题。有时候可以看看其他巧妙的解题思路。 F(0)=7 NO F(1)=11原创 2016-07-13 20:18:14 · 2112 阅读 · 0 评论 -
Java 分治法 求解一组数组元素的最大值和最小值
分治法的思想: 将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。分治法的设计思想,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,从小的问题一个个解决,分而治之。求解一组数组元素的最大值和最小值,传统的方法,我们可以使用遍历或者最简单的排序方法来实现,但是时间复杂度非常高,介于降低时间复杂度,我们可以采用分治法思想求出最大值和最小值。 步原创 2016-06-28 22:53:27 · 5768 阅读 · 1 评论 -
将汉语数字转化为阿拉伯数字
一,python 实现将汉语数字转化为阿拉伯数字1, 例如:输入:二百五十 输出: 250 输入: 一百三十八 输出: 138二,程序1 , python实现具体信息如下:class Solution(object): def chinesetoint(self, strs): ...原创 2019-07-26 23:20:21 · 2265 阅读 · 0 评论