算法
普通网友
这个作者很懒,什么都没留下…
展开
-
选择排序(Selectsort)之Java实现
目录(?)[+]选择排序算法介绍选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常数会更小,更有效率,尽管他们的最坏运行时间都是O(n2)。选择排序算法Java实现如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代转载 2013-12-12 10:33:49 · 928 阅读 · 0 评论 -
通过递归实现嵌套未知次数的循环
如下示例:public class Test4 { public static void main(String[] args) { int m = 10; int n = 9; int p = 4; int q = 7; for(int i=0;i<m;i++){ int a = i;原创 2017-09-06 13:38:57 · 2800 阅读 · 1 评论 -
leetcode数据库sql之Delete Duplicate Emails
leetcode原文引用:Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique emails based on its smallest Id.+----+------------------+| Id | Email原创 2015-08-05 21:46:45 · 931 阅读 · 0 评论 -
leetcode算法之Valid Anagram
原文算法说明如下:Given two strings s and t, write a function to determine if t is an anagram of s.For example,s = "anagram", t = "nagaram", return true.s = "rat", t = "car", return false.翻译:原创 2015-08-04 16:22:41 · 858 阅读 · 0 评论 -
算法研究之快速排序java版
很早之前就已经接触过快速排序算法了,面试当中也屡屡被问到,虽然明白其原理,但从未真正的用代码敲出来。写关于算法的代码之前一定要原理想明白,不然就是盲目,在参考有关资料及自己的沉思之后,写出如下代码,中间出现了一些bug,但都很快解决了如果有更好的优化算法,还请不吝赐教!!!!源代码:package com.zken.test;/** * @author iamzken * 排序算法 *原创 2015-08-27 13:58:36 · 902 阅读 · 0 评论 -
面试题之位运算的巧妙应用
1、判断一个数是否是2的N次方 题目要求:用一个表达式,判断一个数X是否是2的N次方,即2,4,8,16……等,要求不可以用循环语句。 解析:2,4,8,16这样的数转化成二进制是10,100,1000,10000。 如果X减去1后(低一位并且二进制的每一位都是1),这个数与X做与运算,答案若是0,则X是2的N次方。 两个数的交换 题目要原创 2015-08-26 21:34:56 · 1156 阅读 · 0 评论 -
计数排序(Countsort)之Java实现
目录(?)[+]计数排序算法介绍比较排序算法可以通过决策树模型证明,其下线是O(nlgn)。而本文介绍的是时间效率为O(n)的计数排序。所谓排序算法,无非就是把正确的元素放到正确的位置,计数排序就是计算相同key的元素各有多少个,然后根据出现的次数累加而获得最终的位置信息。但是计数排序有两个限制条件,那就是存在一个正整数K,使得数组里面的所有元素的key值都不大于N,且key值都是转载 2013-12-12 10:39:01 · 1040 阅读 · 0 评论 -
堆排序(Heapsort)之Java实现
目录(?)[+]堆排序算法介绍堆是一种重要的数据结构,为一棵完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1),如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2,如果有父节点,父节点的位置是(n-1)/2取整。分为最大堆和最小堆,最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结转载 2013-12-12 10:37:57 · 953 阅读 · 0 评论 -
快速排序(Quicktsort)之Java实现
目录(?)[+]快速排序算法介绍快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。基准元素的选取对算法的转载 2013-12-12 10:36:51 · 972 阅读 · 0 评论 -
冒泡排序(Bubblesort)之Java实现
目录(?)[+]冒泡排序算法介绍冒泡排序比插入排序更简单,把最大的元素逐步推到最高位(当前须处理子数组的最高位)。依我的理解,冒泡排序是一个一层层筑顶的过程。顶筑好了,排序也就好了。冒泡排序的最坏运行时间是O(n2),效率和插入排序一样。冒泡排序算法Java实现如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:[java]转载 2013-12-12 10:32:05 · 825 阅读 · 0 评论 -
Huffman编码算法之Java实现
目录(?)[+]Huffman编码介绍Huffman编码处理的是字符以及字符对应的二进制的编码配对问题,分为编码和解码,目的是压缩字符对应的二进制数据长度。我们知道字符存贮和传输的时候都是二进制的(计算机只认识0/1),那么就有字符与二进制之间的mapping关系。字符属于字符集(Charset), 字符需要通过编码(encode)为二进制进行存贮和传输,显示的时候需要解码(dec转载 2013-12-12 10:30:32 · 1215 阅读 · 0 评论 -
拓扑排序(Topologicalsort)之Java实现
目录(?)[+]拓扑排序算法介绍拓扑排序解决的是一系列相互依赖的事件的排序问题,比如Ant中有很多的Task,而某些Task依赖于另外的Task,编译之前需要清理空间,打包之前要先编译,但其它一些Task处理顺序可以调换(是无所谓前后,不是并行), 如何安排Task的执行顺序就可以用拓扑排序解决。熟悉Java的朋友应该都知道Spring,一个非常优秀的解决组件(Bean)依赖的框架转载 2013-12-12 10:39:48 · 885 阅读 · 0 评论 -
归并排序(Mergesort)之Java实现
目录(?)[+]归并排序算法介绍归并排序是一个分治算法(Divide and Conquer)的一个典型实例,把一个数组分为两个大小相近(最多差一个)的子数组,分别把子数组都排好序之后通过归并(Merge)手法合成一个大的排好序的数组,归并的过程依然用扑克来解释,想象一下桌子上有两堆排好序(从小到大)的牌,每一次从两堆里面各抽取一张,比较一下两张的大小,如果两张一样大,都取出放到目转载 2013-12-12 10:35:18 · 943 阅读 · 0 评论 -
插入排序(Insertsort)之Java实现
目录(?)[+]插入排序算法介绍排序算法是最简单的算法,也是最基本的算法。顾名思义,插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。特点是简单,不需要额外的存储空间,在元素少的时候工作得好。插入排序算法Java实现J转载 2013-12-12 10:29:10 · 824 阅读 · 0 评论 -
leetcode算法实例---组合和枚举问题
给定一列数(未排序)和一列目标值, 找出唯一的一个组合和等于目标值的组合, 数组中的数不能重复使用.算法思路: 使用递归.对数组排序, 从小到大; 令i = 起始下标(初始为0), 对于每一个数, 如果它等于目标值, 则在缓存结果中加入此数并将缓存结果加入输出队列, 随后在缓存结果中删除此数; 如果它小于目标值, 则在缓存结果中加入此数并递归调用此算法, 目标值更新为差值, 起始下标为i;原创 2017-08-23 09:56:37 · 1059 阅读 · 0 评论