![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 55
zfyseu1
这个作者很懒,什么都没留下…
展开
-
归并排序与快速排序
1.算法简介归并排序和快速排序都是采用递归的结构实现的,不同的是归并排序在递归过程中有合并子序列的过程,而快速排序中没有,但是快速排序中有较为复杂的划分过程。二者的平均时间复杂度均为O(nlgn),其中快速排序的系数较小;归并排序最坏情况复杂度为O(nlgn),快排在最坏情况下时间复杂度为O(n^2)。归并排序步骤:分解:分解待排序的n个元素的序列成各具有n/2个元素的两个原创 2016-07-26 17:03:20 · 544 阅读 · 0 评论 -
京东笔试题生日礼物
1.解题思路题目链接:http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3816&konwledgeId=41首先对信封进行排序,然后求最长递增子序列即可2.java代码package jd;import java.util.ArrayList;import java.util.Collecti原创 2017-08-30 10:35:40 · 420 阅读 · 0 评论 -
给定一个入栈顺序和一个出栈顺序,判断出栈顺序是否可能
public static boolean isNormal(int[] nums,int[] output) { if(nums==null||output==null||nums.length!=output.length) return false; LinkedList stack=new LinkedList(); int pos=0原创 2017-09-05 15:49:12 · 1415 阅读 · 1 评论 -
指定栈的进栈顺序,输出所有可能的出栈顺序
public static void stackOut(int[] nums,int inNum,int outNum,LinkedList stack,ArrayList output) { if(inNum==nums.length&&outNum==nums.length) { System.out.println(output); num++; } else原创 2017-09-05 15:03:59 · 3016 阅读 · 2 评论 -
动态规划之背包问题01——Java实现
public class BackPack { public static void main(String[] args) { int m = 10; int n = 3; int w[] = {3, 4, 5}; int p[] = {4, 5, 6}; int c[][] = BackPack_Solut转载 2017-08-13 11:27:42 · 718 阅读 · 0 评论 -
寻找两个有序数组的第k小的数
方法一:归并两个有序数组,然后通过下表访问归并后的数组,即可获得第k小的数,时间复杂度为O(m+n)方法二:利用二分查找的思想,时间复杂度为O(lg(m+n))Java实现代码:package leetcode;import java.util.Arrays;public class MiddleII { public static void main(String原创 2017-07-09 18:28:27 · 1255 阅读 · 0 评论 -
无序数组找第k小的数
无序数组找第k小的数,直接快速排序,然后通过下表访问即可获得第k小的数字,平均时间复杂度为O(nlgn)而借助于快排中的划分操作,可以在平均时间复杂度为O(lgn)的限制下找到第k小的数(《算法导论》中“顺序量与中位数”那一章有是时间复杂度的证明)具体思路:对数组进行划分操作,返回第一次划分基准值所在的位置index,a. 如果index=k-1则说明找到了第k小的数,直接原创 2017-07-09 16:59:48 · 676 阅读 · 0 评论 -
链表排序(冒泡、插入、归并和快排)
1. 各种排序的主要操作与数组相比,链表随机访问特性较差,直接交换两个节点比较困难,但是插入和删除节点比较方便,因而链表排序中多使用到节点的插入和删除操作。冒泡排序:时间复杂度O(n^2) 主要操作时链表中相邻的两个节点交换插入排序:时间复杂度O(n^2) 主要操作时将链表中的某个节点插入到链表中指定的节点的前面归并排序:时间复杂度O(nlgn) 空间复杂度O(lgn)原创 2017-06-22 15:13:53 · 404 阅读 · 0 评论 -
二叉树非递归遍历Java实现
二叉树的前序、中序和后序遍历可以采用递归和非递归的方法实现,递归的方法逻辑简单清晰,易于理解,但递归的方法需要使用额外的栈空间,运行效率较低。而非递归的方法则效率较高。维基百科上有递归和非递归二叉树三种遍历实现的伪代码,https://en.wikipedia.org/wiki/Tree_traversal#In-order_2下面是相应的Java实现:前序遍历(非递归原创 2017-06-30 13:59:13 · 2040 阅读 · 0 评论 -
给定一个数组,求出数组元素的排列和组合——Java实现
1. 思路组合数C(n,m)和全排列A(n,n)可以通过递归的方式,直接实现。而A(n,m)则可以通过组合数和全排列间接求出A(n,m)=C(n,m)*A(m,m),即对得到的组合数中的每个元素进行全排列2. Java实现package com.zfy.test3;import java.util.*;public class PC { public原创 2017-04-22 15:32:44 · 5041 阅读 · 0 评论 -
数组总逆序对个数计算
1.逆序对概念设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。如果存在正整数 i, j 使得 1 ≤ i A[j],则 这个有序对称为 A 的一个逆序对,也称作逆序数。2. 计算数组中逆序对个数方法一:逐个遍历,复杂度O(n^2)Java实现如下:public static int reverseCoupleNum1(char原创 2017-04-04 19:30:00 · 873 阅读 · 0 评论 -
KMP字符串匹配算法Java实现
根据算法导论的的伪代码进行实现:import java.util.ArrayList;import java.util.List;public class KMP { static int[] computePrefix(String P) { int[] next=new int[P.length()]; int k=0; next[0]=0; for(int q=原创 2017-02-01 22:38:30 · 971 阅读 · 1 评论 -
九种排序算法总结与Java实现
一、九种排序算法总结平均时间复杂度O(n^2): 冒泡排序、选择排序、插入排序平均时间复杂度O(nln): 快速排序、归并排序、堆排序时间复杂度介于O(nlgn)和O(n^2):希尔排序时间复杂度O(n+k):计数排序时间复杂度O(d(n+k)):基数排序稳定排序:冒泡排序、插入排序、归并排序、计数排序、基数排序不稳定排序:选择排序、快速排序、堆排序、原创 2017-01-27 14:58:23 · 470 阅读 · 0 评论 -
常见图算法总结与Java实现
下面的代码中实现了基于邻接表的图算法包括广度优先遍历、深度优先遍历、最小生成树算法Prim和Kruskal、单源最短路径算法Bellman-Ford和Dijkstra代码参考算法导论和https://github.com/wangkuiwu/datastructs_and_algorithm/blob/master/source/graph/prim/udg/java/ListUDG.java原创 2017-02-10 20:10:11 · 2027 阅读 · 1 评论 -
二叉搜索树Java实现
二叉搜索树:对与树中任一节点x,其左子树的关键字小于等于x.key,其右子树的关键字大于等于x.key。二叉搜索树其常见操作的最坏时间复杂度度均为O(h),其中h为树的高度。用于实现linux进程管理和Java TreeMap的红黑树就是一种平衡二叉搜索树。下面为二叉搜索树的Java实现(参考算法导论的伪代码)package Tree;import java.util.LinkedL原创 2017-02-04 20:25:17 · 260 阅读 · 0 评论 -
k路有序数组归并Java实现
public static int[] merge(int[] A,int[] B) { int[] result=new int[A.length+B.length]; int lpos=0,rpos=0; for(int i=0;i<result.length;i++) { if(lpos<A.length&&rpos<B.length) { if(原创 2017-09-11 10:57:24 · 993 阅读 · 0 评论