![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
qinlianfa
Adventure may hurt you, but monotony will kill you.
展开
-
判断一条单向链表是不是“回文”
思路:先找到单链表的中间节点,对后半部分进行反转,然后用两个指针分别指向链表的头部和中间节点,进行遍历比较。 定义节点类型: class ListNode{ int val; ListNode next; public ListNode(int val){ this.val = val; this.next =null; } } public boolean i原创 2015-03-15 16:15:17 · 566 阅读 · 0 评论 -
青蛙跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个N级台阶总共有多少种跳法。原创 2015-07-03 18:40:30 · 1457 阅读 · 0 评论 -
java迷宫算法
本章使用栈来实现迷宫算法 基本思路为: 对入口节点进行标记 while(栈不空){ 查看栈顶元素; if(栈顶元素为出口节点){ 循环输出栈中元素 } else{ if(查看该节点的下方节点是否符合条件){ 对下方节点标记; 下方节点入栈;原创 2015-06-29 09:38:41 · 1241 阅读 · 0 评论 -
由先序序列/后序序列和中序序列构造二叉树
假设树的先序序列和中序序列分别为 preorder = {7,10,4,3,1,2,8,11} inorder = {4,10,3,1,7,11,8,2} 1.将中序序列存储在hashmap中,key存储节点的值,value存储节点在中序序列中的下标。public void map(int[] order){ int n = order.length; for(原创 2015-06-13 10:47:38 · 1097 阅读 · 0 评论 -
求一个集合的所有子集(二进制实现)
含有n个元素的集合具有2^n个子集,可以使用具有n位的二进制数来表示其中的某一个子集。如集合{a,b,c,d} ,可以使用1000 表示子集{a} , 1001 表示子集{a,d}。n位的二进制刚好有2^n个数。由于int型只有32位,所以只能表示具有32个元素的子集。以下用int数组来表示一个大数,使用大数来表示子集。public class BigDataZiJiHe { int[]原创 2015-07-09 20:05:40 · 1657 阅读 · 0 评论 -
快速选择算法 查找数组中第个最小元素(元素不重复)
修改快速排序算法以解决选择问题,步骤如下: (1)若数组S中只有一个元素,则返回次元素。 (2)在S中选取元素v作为枢纽. (3)将集合S-{v} 分割成两个集合S1和S2。 (4)若k|S1|+1,则枢纽元为要找的元素。否则第k个元素在S2中,它是S2中第K-|S1|-1个最小元,即quickSelect(S2,K-|S1|-1)。 代码如下: public class Kto原创 2015-05-31 14:17:42 · 485 阅读 · 0 评论 -
快速排序
1.快速排序的基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 对数组s 进行快速排序的步骤如下 (1)如果s中元素的个数为0或1,则返回。 (2)取s中任一元素v作为枢纽元(pivot)。 (3)将剩余的元素s-{v} 划分原创 2015-05-30 15:48:25 · 325 阅读 · 0 评论 -
希尔排序
希尔排序实质上分组的插入排序,利用“增量”将待排数据分为若干个组,分别对这些组进行插入排序,然后“增量”减小,再分组,再排序,直至“增量”为1,所有数据为一组,此时这些数据大部分都已有序,进行插入排序效率较高。 如图:当增量为5时,分组情况为(81,35,41),(94,17,75),(11,95,15),(86,28),(12) 分别对每组插入排序。排序后,各组内部是有序的。然后减为原创 2015-05-13 14:23:05 · 383 阅读 · 0 评论 -
判断单链表是否存在环及求环入口点
1.判断单向链表是否存在环 设置两个指针,fast,slow 。 fast每次走两步,slow每次走一步。 若链表存在换的话,则fast先进入环,在slow走完一圈之前,fast与slow必然在某点相遇,此时fsat==slow。 代码如下: public boolean isCir(ListNode l){ if(l == null || l.next == null){ r原创 2015-04-15 09:56:23 · 546 阅读 · 0 评论 -
字符串转数字
题目:输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。 要考虑的问题: 1.字符串为空串 ‘ ’ ; 2.有‘ +’或‘-’等符号; 3.非法字符; 4.字符串表示的数字过大,超出了Int 表示的范围, -2147483648 ~ 2147483647 。 public static int atoi(String s ) th原创 2015-03-14 15:58:55 · 422 阅读 · 0 评论 -
字符串包含
两个由字母组成的字符串S1,S2 .判断S1是否包含S2中的所有字母。均为大写字母。 方法一: 使用HashMap public static boolean zifuTest(char[] s1,char[] s2){ Map map = new HashMap(); for(int i =0;i<s1.length;i++){ map.put(s1[i], s1[i]);原创 2015-03-12 19:50:04 · 424 阅读 · 0 评论 -
反转句子中的单词
题目:单词翻转。输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如,输入“I am a student.”,则输出“student. a am I”。原创 2015-03-12 17:04:23 · 1399 阅读 · 0 评论 -
使用递归实现数的全排列
设有一个int数组,包含5个元素,每个元素只能取0或1,求这5个元素的全排列。原创 2015-07-10 14:45:17 · 536 阅读 · 0 评论