
算法
文章平均质量分 57
37度冬天
这个作者很懒,什么都没留下…
展开
-
剑指offer23--从上往下打印二叉树
public class PrintFromTopToBottom {public void printFromTopToBottom(BinaryTreeNode root){if(root!=null)return ;Queue> queue=new LinkedList>();queue.add(root);while(!queue.isEmpty()){转载 2014-11-02 11:31:26 · 564 阅读 · 0 评论 -
最大公约数和最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。程序分析:利用辗除法。public class Prog6{public static void main(String[] args){int m,n;try{m = Integer.parseInt(args[0]);n = Integer.parseInt(args[1]);}catch(ArrayInd转载 2014-11-14 09:22:55 · 587 阅读 · 0 评论 -
有向图,无向图,连通图,完全图
立方网笔试题,6个顶点的无向图,至少有几个原创 2014-10-11 22:00:58 · 32564 阅读 · 0 评论 -
剑指offer---不能加减乘除做加法
public class Add { /* * 不能加减乘除做加法 */ public int add(int num1,int num2) { int sum=0,carry=0; do { sum=num1^num2; carry=(num1 & num2) << 1; num1=sum; num2=carry; } while (num2!转载 2014-11-13 22:12:43 · 551 阅读 · 0 评论 -
剑指offer---圆圈中最后剩下的数字
import java.util.ArrayList;public class LastRemaining { /* 0,1...n-1这N个数字排成一个圆圈,从从数字0开始每次从这个圆圈里删除第M个数字. 求这个圈圈里剩下的最后一个数字 */ public int lastRemaining (int count,int m) { if(count转载 2014-11-13 21:37:46 · 597 阅读 · 0 评论 -
哈夫曼树
立方网笔试,哈夫曼树,集合W={}15,3,14,2,6,9,16,17;原创 2014-10-11 21:45:28 · 1349 阅读 · 0 评论 -
剑指offer16--反转链表
//用三个引用指向xiayigepublic class ReverseList {/** 输入一个链表的头结点,翻转改链表并输出翻转后的头结点*/public ListNode reverseList(ListNode head){if(head==null)return null;ListNode preListNode=null;ListNode no转载 2014-10-27 10:29:24 · 572 阅读 · 0 评论 -
链表中倒数第k个结点
public class FindKthToTail {/** 输入一个链表,输出该链表的倒数第K个结点*/public ListNode findKthToTail(ListNode head,int k){if(head==null || kreturn null;ListNode resultListNode=null;ListNode poListNod转载 2014-10-27 10:02:43 · 432 阅读 · 0 评论 -
剑指offer--合并两个递增链表
//spublic class Merge {/** 输入两个递增的链表,合并这两个链表并使新链表仍然是递增的*/public ListNode merge(ListNode root1,ListNode root2){if(root1==null)return root2;else if(root2==null)return root1;ListN转载 2014-10-27 10:42:27 · 474 阅读 · 0 评论 -
快速排序
快速排序概念:原创 2014-10-12 21:30:12 · 522 阅读 · 0 评论 -
剑指offer24--二叉树的后序遍历
//思想:输入一个数组,该数组转载 2014-10-31 09:58:13 · 496 阅读 · 0 评论 -
快速排序
/* * 快速排序 */public class QuickSort {/*** 划分数组*/public static int partition(long arr[],int left, int right,long point) {int leftPtr = left - 1;int rightPtr = right;while(true) {原创 2014-11-03 14:22:51 · 463 阅读 · 0 评论 -
剑指offer28--字符串的排列
public class AllSort{ public static void main(String[] args) { char buf[]={'a','b','c'}; perm(buf,0,buf.length-1); } public static void perm(char[] buf,i转载 2014-10-25 22:48:48 · 414 阅读 · 0 评论 -
剑指offer31--连续子数组的最大和
public class FindGreatestSum {/** 连续子数组的最大和*/public Integer findGreatestSum(int[] array){if(array==null)return null;int greatest=0;int curSum=0;for(int i=0;i{if(curSum+array[i]转载 2014-11-04 12:54:58 · 599 阅读 · 0 评论 -
剑指offer29--数组中出现超过一半的数字
public class MoreThanHalfNum {/** 数组中有一个数字出现的次数超过数组长度的一般,求这个数字*/public Integer moreThanHalfNum(int[] array){if(array==null)return null;Integer number=null;int count=0;Integer resul转载 2014-11-03 11:03:19 · 400 阅读 · 0 评论 -
剑指offer22--栈的压入弹出序列
public class IsPopOrder {/** 输入两个整数序列,第一个序列表示压入顺序,判断第二个序列是否为弹出顺序.假设入栈所有数字均不相等*/public boolean isPopOrder(int[] line1,int[] line2){if(line1==null || line2==null)return false;int point1=转载 2014-11-02 11:20:58 · 463 阅读 · 0 评论 -
选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。/** * 选择排序,比较前后两个元素,比如下标为0和下标为1的比较,下标为1和下标为2的比较,依次类推,当前面元素大于后面元素,则互换位置, * 一轮比较完之后,最大元素则排在最末,这样再重复以上步骤,比较前9个元素,一轮比较原创 2014-10-14 11:34:02 · 407 阅读 · 0 评论 -
将整数转换成数组的相关题目
一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。import java.io.*;public class Prog25{public static void main(String[] args){int n = 0;System.out.print("请输入一个5位数:");BufferedReader bufin = new Bu原创 2014-10-14 11:37:36 · 650 阅读 · 0 评论 -
树的度和深度
度:结点的孩子或后继结点的个数二叉树的度代表某个结点的孩子或者说直接后继的个数,1度是只有一个孩子或者说单子树,2度是有两个孩子或者说左右子树都有原创 2014-10-12 22:07:56 · 3561 阅读 · 0 评论 -
剑指offer--17树的子结构
public class DoesTree1HaveTree2 {/** 判断二叉树B是不是二叉树A的子树*/public boolean doesTree1HaveTree2(BinaryTreeNode root1,BinaryTreeNode root2){if(root2==null)//遍历到子树的叶子结点则证明是子树return true;elsei转载 2014-10-27 11:04:52 · 394 阅读 · 0 评论 -
Hash算法
http://www.cnblogs.com/wangjy/archive/2011/09/08/2171638.htmlHash算法 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入转载 2014-10-25 22:06:15 · 664 阅读 · 0 评论 -
剑指offer--单链表O(1)删除节点
public class DeleteNode {/** 给定单向链表的头指针和一个节点,定义一个函数在O(1)时间删除该节点*/public void deleteNode(ListNode head,ListNode deListNode){if(deListNode==null || head==null)//链表为空return ;if(head==de转载 2014-10-25 23:17:18 · 535 阅读 · 0 评论 -
前序、中序、后序遍历
前序、序、序遍历看根结点结点遍历位置假设有三符号:@ # ¥则序遍:@ # ¥其 # 根结点;前序遍历:# @ ¥其 # 根节点;序遍历:@ ¥ #其根节点 # 遍历方法从上往下从左往右 @(根) @(左) @(右)即序遍历:左根右; 序遍历:左右根; 前序遍历:根左右; 重点于:从上往下从左往右原创 2014-06-26 22:47:35 · 601 阅读 · 0 评论 -
合并排序
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为: 1)划分子表 2)合并半子表 首先我们来讨论归并算法,归并算法将一系列数据放到一个向量中,索引范围为[first,last],这个序列由两个排好序的子表构成,以索引终点(mid)为分界线,以下转载 2014-05-25 22:05:46 · 571 阅读 · 0 评论 -
快速排序算法
快速排序算法是基于分支策略的另一个排序算法,最关键的步骤是找到ji转载 2014-05-25 21:16:54 · 498 阅读 · 0 评论 -
整数划分问题
整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式: n=m1+m2+...+mi; (其中mi为正整数,并且1 如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi) 例如当n=4时,他有5个划分,{4},{3,1},{2,2},{2原创 2014-05-24 23:11:10 · 418 阅读 · 0 评论 -
算法导论堆排序java实现
/** * * @author maobufan * 算法导论第六章堆排序6.5-8 * */public class Mergelist { private static int k,m; private int []A; private int heapSize; public Mergelist(int []A){ this.A=A;原创 2014-06-07 20:45:55 · 559 阅读 · 0 评论 -
第六章堆排序之“优先级队列实现先进先出队列和栈”(练习6.5-6)
思路如下:首先要先明确优先级是谁?优先级队列嘛,当然最重要的是要先知道“优先级”是谁,才能按它排序。这里的优先级就是进出队的次序。(1)优先级队列实现先进先出队列(最大优先级队列)先进队的优先级更高,赋予每个进队的元素一个优先级值,但优先级的值我们令0最大,1次之,2再次之,···,然后按着这个优先级值建立最大优先级队列,每次用HeapExtractMax()取堆顶元素,这个肯定是转载 2014-06-06 21:40:10 · 598 阅读 · 0 评论 -
散列表---HashMap,HashSet,HashTable
HashMap允许键值为空,HashSet底层用HashMap原创 2014-06-25 21:37:25 · 560 阅读 · 0 评论 -
java 编写的最大优先级队列
package com.priorityquence; /** * * @author kinglong1203 2011.2.20 * */ public class MaxPriorityQuence { private int size ; private int quenceSize; private int[] array;转载 2014-06-05 22:28:57 · 539 阅读 · 0 评论 -
分治法在循环日程赛中的运用
任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。分治法是计算机科学中经常使用的一种算法。设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。但是不是所有问题都适合用分治法解决。当求解一个输入规模为n且取值又相当大的问题时,使用蛮力策略效率一般得不到保证。1 分治法应用条件及一般步转载 2014-05-27 23:33:34 · 887 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度-总结
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的转载 2014-05-31 00:19:07 · 859 阅读 · 0 评论 -
剑指offer--翻转单词VS左转字符串
package Problem42;public class ReverseSentence { /* * 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变 */ public void reverseSentence(String sentence) { if(sentence==null) return ; String sentenceRever转载 2014-11-10 16:27:39 · 687 阅读 · 0 评论 -
剑指offer面试题8--数组旋转
//二分查找的sipublic Integer minInReversingList(int[] array){if(array==null)return null;int leftIndex=0;int rightIndex=array.length-1;int mid=1;while(array[leftIndex]>=array[rightIndex]){转载 2014-10-25 10:53:47 · 428 阅读 · 0 评论 -
二分查找
public class BinarySearch { /** * 二分查找算法 * * @param srcArray 有序数组 * @param key 查找元素 * @return key的数组下标,没找到返回-1 */ public static void main(String[] args转载 2014-10-25 10:45:32 · 436 阅读 · 0 评论 -
剑指offer--面试题7两个栈实现队列
//思路,栈1添加元素,然后把栈1元素加入到栈2中,转载 2014-10-25 10:16:49 · 603 阅读 · 0 评论 -
剑指offer---和为s的两个数字VS和为s的连续正数序列
public class FindNumbersWithSum { /* * 问题1:输入一个递增排序的数组和一个数字s.在数组中查找两个数使他们的和为s,如果有多对数字的和等于s,输出一对即可 */ public void findNumbersWithSum(int[] sortedArray, int number) { if(sortedArray==null) r转载 2014-11-10 15:58:44 · 916 阅读 · 0 评论 -
各种排序算法的分析及java实现
http://www.cnblogs.com/liuling/p/2013-7-24-01.html 排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。 排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在转载 2014-10-26 22:45:53 · 426 阅读 · 0 评论 -
剑指offer39---二叉树的深度
public class treePath { /* * 1.输入根节点求树的深度 */ public int treePath(BinaryTreeNode root) { if(root==null) return 0; int left=treePath(root.lefNode); int right=treePath(root.rightNode);转载 2014-11-10 16:32:18 · 655 阅读 · 0 评论 -
剑指offer面试题6--重建二叉树
public class ConstructCore {/*输入二叉树的前序遍历和中序遍历结果,重建二叉树并输出头节点ex:12473568,47215386*/public BinaryTreeNode constructCore(int[] preorder,int[] inorder) throws Exception{// System.out.println(转载 2014-10-25 10:05:50 · 580 阅读 · 0 评论