Algorithm
文章平均质量分 57
chiiis
这个作者很懒,什么都没留下…
展开
-
qsort()应用大全
七种qsort排序方法 一、对int类型数组排序 七种qsort排序方法 一、对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; }转载 2013-03-15 21:25:29 · 1153 阅读 · 0 评论 -
正则表达式的一个教训
我写了一个很长的正则表达式来处理一个很大的文件,发现运行非常慢。结果debug发现卡在一个很长的字符串那里。经过研究,和这两篇的情况很像:http://tech.diandian.com/post/2012-02-23/14558251http://iregex.org/blog/regex-optimizing.html结论是,如果正则表达式写的没有效率,原创 2014-01-22 13:07:22 · 1263 阅读 · 0 评论 -
Inorder Successor in Binary Search Tree BST中找中序遍历的后继节点
Inorder Successor in Binary Search Tree原创 2014-02-27 07:08:38 · 5506 阅读 · 0 评论 -
找最小的第k个数 k min (Selection Algorithm 与 Median of Medians Algorithm)
题目很简单:要求一个算法能在一个长度为n的无序数组中找到第k小的数(k从0开始)例如:4, 1, 2, 5 序列的第2小的数应该是4. 因为原数列排序后为1,2,4,5 所以第0小的数是1,第1小的数是2,第2小的数是4,第3小的数是5.解法:1)排序:最容易想到的解法就是先把整个数组从小到大排序一遍,然后想要找哪一个数从头开始找即可。这种解法时间复杂度:O(nlogn)原创 2014-03-17 10:45:13 · 6729 阅读 · 3 评论 -
面试算法爱好者书籍/OJ推荐
面试算法爱好者书籍/OJ推荐原创 2014-04-25 10:45:14 · 3557 阅读 · 0 评论 -
面试大总结之一:Java搞定面试中的链表题目
链表是面试中常出现的一类题目,本文用Java实现了面试中常见的链表相关题目。本文主要参考整合重写了《轻松搞定面试中的链表题目》和 《算法大全(1)单链表》两篇大作。两篇大神的实现分别是C和C#,因为我更喜欢用Java面试,所以用Java重写了所有实现,并附上自己的一些思考注释。算法大全(1)单链表 尚未有一些问题尚未整合进来,很快我会更新本文。package LinkedListSum原创 2013-11-16 05:53:31 · 26532 阅读 · 36 评论 -
Sudoku Solver 破解数独 @LeetCode 附DFS感想
典型DFS/递归/回溯/深搜题。对于DFS,说白了1) 什么时候返回?在本题中,1.当x>8或y>8 表示已经遍历完所有的格子,因此成功完成,返回true。2.当下一个搜索(子搜索)返回true,说明已经找到,返回true。 3.如果测试过本轮的所有可能解,但无一是对的,说明无解,返回false。 4.如果当前空格不是空格,则改变x,y坐标后,继续下一个空格的尝试2)DFS就是针对本轮原创 2013-11-24 11:00:55 · 4694 阅读 · 6 评论 -
一道小题:从一个数组里产生所有可能的乘积组合
比如给定一个数组[2,3,11] 要求产生[1,2,3,6,11,22,33,66]观察可得:[2,3] 产生了[1,2,3,6] 的乘积可能。当加入11时,11会和现有的每一个元素都相乘得到[1,2,3,6,11,22,33,66]public static void allProducts(int[] arr) { List list = new ArrayList(); list.a原创 2014-08-14 15:10:09 · 2394 阅读 · 0 评论 -
Mergesort
Mergesort:import java.util.*;public class MergerSort{ public static void main(String[] args) { Integer[] a = {2, 6, 3, 5, 1}; mergeSort(a); System.out.println(Arrays.toString(a)); } publ原创 2014-10-17 20:37:14 · 1279 阅读 · 0 评论 -
挑战最强大脑——来自全球的14个编码社区
摘要:史蒂夫·乔布斯说过,每个人都应该学习给电脑编写程序的技术,因为这一过程能够教你如何去思考!文中搜集了14个不错的学习资源,帮助你挑战自我,领略并探索计算机领域无穷奥秘。史蒂夫·乔布斯说过,每个人都应该学习给电脑编写程序的技术,因为这一过程能够教你如何去思考!众所周知,编程已成为开发者生命中至关重要的一部分。很多事实表明,越来越多的人不管男女老少都将参与编程这个行业。 学习编程的渠道有很多种,转载 2015-01-15 02:23:41 · 4553 阅读 · 0 评论 -
最大连续子序列和
最大连续子序列和问题是个很老的面试题了,最佳的解法是O(N)复杂度,当然其中的一些小的地方还是有些值得注意的地方的。这里还是总结三种常见的解法,重点关注最后一种O(N)的解法即可。需要注意的是有些题目中的最大连续子序列和如果为负,则返回0;而本题目中的最大连续子序列和并不返回0,如果是全为负数,则返回最大的负数即可。 问题描述 求取数组中最大连续子序列和,例如给定数组为A={1...2013-03-08 05:11:00 · 157 阅读 · 0 评论 -
深入理解递归
大家都知道,递归的本质和栈数据的存取很相似了,都是先进去,但是往往最后处理!再者对于递归函数的局部变量的存储是按照栈的方式去存的,对于每一层的递归函数在栈中都保存了本层函数的局部变量,一边该层递归函数结束时能够保存原来该层的数据!如图:如上图递归式依次往下进行的,并且在该层递归函数还没结束即将进入下一层递归调用时,将会把该层函数中的局部变量保存起来,以供下次使用! 好了,以上是递归函数的数据存储...2013-03-13 19:33:00 · 252 阅读 · 0 评论 -
qsort()应用大全
1.qsort函数:原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));功 能: 使用快速排序例程进行排序参 数:1 待排序数组首地址2 数组中待排序元素数量3 各元素的占用空间大小4 指向函数的指针,用于确定排序的...2013-03-15 21:25:00 · 196 阅读 · 0 评论 -
深入理解递归
大家都知道,递归的本质和栈数据的存取很相似了,都是先进去,但是往往最后处理!再者对于递归函数的局部变量的存储是按照栈的方式去存的,对于每一层的递归函数在栈中都保存了本层函数的局部变量,一边该层递归函数结束时能够保存原来该层的数据!如图: 如上图递归式依次往下进行的,并且在该层递归函数还没结束即将进入下一层递归调用时,将会把该层函数中的局部变量保存起来,以供下次使用!原创 2013-03-14 03:33:23 · 7576 阅读 · 3 评论 -
最清晰的LZW Compression Coding和LZW Decompression Decoding 讲解
这是见到过的把这个算法讲的最清楚的文档了http://faculty.kfupm.edu.sa/ics/saquib/ICS202/Unit32_LZW.pdf特别是讲解LZW decompression 的那个第二个伪代码,太清晰的讲解了,配合伪代码很清楚的就能理解例子1,然后自己做一遍例子2作为验证。简直神作!原创 2013-12-12 03:12:54 · 2250 阅读 · 0 评论 -
最好的算法讲解视频:Algorithms by Robert Sedgewick
很少有人能把算法讲的像Robert Sedgewick 一般地浅显易懂!https://class.coursera.org/algs4partI-003/classhttps://class.coursera.org/algs4partII-002/class改后缀名为torrent,可下载全集原创 2013-12-10 14:06:00 · 10095 阅读 · 1 评论 -
Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
Google面试题股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值)。import java.util.*;/** * Find median with max-heap and min-heap * O(1) find and O(logN) insert * */publ原创 2013-10-15 13:44:27 · 4021 阅读 · 0 评论 -
一句话经典总结红黑树插入
首先大牛绕道,本文适合想要快速懂得红黑树插入的过程,而暂时不考虑算法实现细节的人。比如:你如果想快速知道 http://www.youtube.com/watch?v=vDHFF4wjWYU 的过程是为什么这样。那么本文适合你。红黑树需要保持的性质:1、 每个结点的颜色只能是红色或黑色。2、 根结点是黑色的。3、 每个叶子结点都带有两个空的黑色结点(被称为黑哨兵nil)原创 2013-10-17 02:14:36 · 2338 阅读 · 0 评论 -
递归转非递归理解
可以使用下面这几种方法来实现递归到非递归的转换.(1) 循环方法循环方法是所有递归到非递归的转换中最理想的方法,可以将开销减少到最小.不过也是分析起来最复杂的,对于简单的递归可以用这样的方法来处理.例如:Factorial计算这里回到n!(阶乘)定义上面来分析,这里将n!数学意思为n! = n*(n-1)! & 1!=1;做一个扩展可以到到n!另外一个表示方法n! = n*原创 2013-10-19 05:01:08 · 1793 阅读 · 0 评论 -
递归,回溯,DFS,BFS的理解和模板
LeetCode 里面很大一部分题目都是属于这个范围,例如Path Sum用的就是递归+DFS,Path Sum2用的是递归+DFS+回溯这里参考了一些网上写得很不错的文章,总结一下理解与模板递归:就是出现这种情况的代码: (或者说是用到了栈)解答树角度:在dfs遍历一棵解答树 优点:结构简洁缺点:效率低,可能栈溢出递归原创 2013-10-19 04:54:51 · 18809 阅读 · 2 评论 -
最长公共子串 Longest Common Subsequence
动态规划的经典题!package DP;import java.util.Arrays;// 最长公共子串 Longest Common Subsequencepublic class LCS { static int dp[][] = null; public static void main(String[] args) { String a = "ABCABC原创 2013-10-27 10:39:12 · 2966 阅读 · 0 评论 -
最长递增子序列-Longest Increasing Subsequence
动态规划的经典题!package DP;import java.util.Arrays; public class LIS { public static void main(String[] args) { int[] A = {5,3,4,8,6,7}; System.out.println(lis(A)); System.out.println(lis原创 2013-10-27 09:14:24 · 1724 阅读 · 0 评论 -
经典题:罗马数字和阿拉伯数字的相互转换
package Linkedin;public class RomeToArabic { public static void main(String[] args) { String s = "IV"; System.out.println(r2a(s)); System.out.println(a2r(34)); } //罗马数字转阿拉伯数字: // 从前往后遍历原创 2013-10-22 03:24:49 · 11167 阅读 · 0 评论 -
经典面试题:100的阶乘有几个结尾零
100! = 100*99*98*97*...*2*1先看看结尾零是如何形成的:结尾零当一个5的倍数与2的倍数相乘时就会形成。所以我们只要计算有几对(2,5),就能知道有几个结尾零。先来数5因子有几个:在100内,5作为因子的数有5, 10, 15, 20, 25... 总共有20个。但是注意到25, 50, 75, 100都包含了2个5作为因子(25=5*5, 50=2*原创 2013-11-15 13:19:13 · 8527 阅读 · 2 评论 -
面试大总结之二:Java搞定面试中的二叉树题目
这是本系列的第二篇,与前一篇 面试大总结之一:Java搞定面试中的链表题目 相比,二叉树的题目可以变化的就更多了。本文还是参考整合重写了《轻松搞定面试中的二叉树题目》和《算法大全(3) 二叉树》两篇大作。本文一个小亮点就是几乎每一道题都用了递归和迭代两种方法写过一遍,因为面试时往往可能会被要求写不擅长的那一种。这一千多行的记录也是我在面试摸索过程中的一个小笔记,备份与此。请大神们轻拍指正。今后原创 2013-11-20 14:04:27 · 29304 阅读 · 24 评论 -
一道DFS的小题: 部分和问题
部分和问题 (挑战程序设计竞赛)给定整数 a 1 、a 2 、…、a n ,判断是否可以从中选出若干数,使它们的和恰好为 k。 输入 n=4 a={1,2,4,7} k=13 输出 Yes (13 = 2 + 4 + 7) 输入 n=4 a={1,2,4,7} k=15 输出 No // 输入 in原创 2013-11-23 05:37:40 · 5576 阅读 · 5 评论 -
不用+-×÷求两个整数的之和
分析:这个问题最容易想到的是利用位运算实现。类似数字电路中的全加器的原理。2bit全加器的原理如下:输出S=A异或B进位C=A与B真值表如下:ABSC000001原创 2013-11-13 02:51:38 · 1401 阅读 · 0 评论 -
经典Peterson算法解决互斥锁的并发的Java实现
Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个进程访问一个共享的单用户资源而不发生访问冲突。public class Peterson implements Runnable { private static boolean[] in = { false, false }; // 主观地表示某一个进程是否希望使用资源 private原创 2013-11-14 11:38:39 · 4174 阅读 · 0 评论 -
8皇后问题的三种解法
算法竞赛入门经典第7章 1 生成遍历法:先产生所有的可能,然后根据限制条件过滤结果 #define RUN#ifdef RUN#include<stdio.h>//C[x]=y 表示x行的皇后处于y列int C[50], tot = 0, n = 8, nc = 0;void search(int cur) { int...2013-03-26 05:19:55 · 168 阅读 · 0 评论