算法
文章平均质量分 56
传a奇
这个作者很懒,什么都没留下…
展开
-
字符串之字符串平移(java实现)
对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后。给定一个字符串A和它的长度,同时给定len,请返回平移后的字符串。 测试样例:"ABCDE",5,3解析:解题思路比较简单,假设字符串长度为n,则首先分别逆序0-(len-1)和len-(n-1)的子串,然后见整个字符串再次逆序,即可得到结果。算法实现:(以下代码本人亲自测试无误)import原创 2015-11-14 18:35:18 · 2285 阅读 · 0 评论 -
有意思的位运算
笔试的时候遇到的几个比较有意思的关于位运算的题。 问题一请编写一个算法,不用任何额外变量交换两个整数的值。给定一个数组num,其中包含两个值,请不用任何额外变量交换这两个值,并将交换后的数组返回。测试样例:[1,2]返回:[2,1] 解法一:常规解法import java.util.*;public class Compare {原创 2015-12-06 17:29:09 · 499 阅读 · 0 评论 -
一致性Hash算法
基本场景 工程师常使用服务器集群来设计和实现数据缓存,以下是常见的策略: 1、无论是添加、查询、还是删除数据,都先将数据id通过海西函数转换成一个哈希值,记为key。 2、如果目前机器有N台,则计算key%N的值,这个值就是该数据所属的机器编号,无论是添加、删除还是查询操作,都只在这台机器上进行。存在问题 上面场景中的缓存策略的潜在问题是如果增加或删原创 2016-01-03 14:49:16 · 610 阅读 · 0 评论 -
Hash冲突解决方法
最近在看HashMap的源码,那就再把hash函数和hash冲突总结一下。。。。。。。。。。。1.哈希法简介 哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。这种方法的基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字原创 2015-12-20 14:25:22 · 1225 阅读 · 0 评论 -
一个异常引发的集合多线程思考
对于Hashtable和HashMap,相信每个学习Java的人都不会陌生,这两个集合在用法上并没有什么不同,但在使用环境上却有很大差别:(1)区别,这两个类主要有以下几方面的不同: Hashtable和HashMap都实现了Map接口,但是Hashtable的实现是基于Dictionary抽象类 在HashMap中,null可以作为键,这样的键只有一个;可以有一个原创 2015-11-17 21:04:51 · 870 阅读 · 0 评论 -
常用排序算法的性能分析及应用场景
一.排序算法分类1.插入排序法 直接插入排序,希尔排序(面试最常问)2.交换排序 冒泡排序,快速排序(面试最常问)3.选择排序 直接选择排序,堆排序(面试最常问)4.归并排序 归并排序5.基数排序当然排序算法博大精深,肯定不止以上几种,本人只列出了几个最为经典的,也是最常用的排序算法。二.空间、时间复杂度、稳定性原创 2015-11-01 13:39:15 · 11005 阅读 · 1 评论 -
二分查找的几个变种(Java代码实现)
二分查找是一种比较普遍的查找方法,面试的时候也会经常问道,但稍微有点档次的公司都不会直接问二分查找的递归和非递归实现(因为太没技术含量了),所以二分查找的几个变种,面试这还是需要熟悉的,下面介绍几种二分查找的变种:原创 2015-10-31 15:30:22 · 630 阅读 · 0 评论 -
几种常见排序算法的Java代码实现
首先通过下面一张图了解排序算法的分类:下面是八种排序算法的Java代码实现:一.插入排序简单插入排序[java] view plaincopy"code" class="java">"font-size:18px;">public class InsertSort { /**原创 2015-11-01 14:17:23 · 716 阅读 · 0 评论 -
字符串之拼接
对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。测试样例:["abc","de"],2"abcde"解析:可以将该题转换成字符串排序的问题,主要思路是将字符串数组某种规则进行由小到大排序,一次拼接排序后的字符串即可得到结果,那具体使用什么排序规则就需要原创 2015-11-14 18:51:45 · 1500 阅读 · 0 评论 -
字符串之逆序(java实现)
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。给定一个原字符串A和他的长度,请返回逆序后的字符串。测试样例:"dog loves pig",13返回:"pig loves dog"解析:首先将整个字符串逆序,然后将空格分割成的各个子串逆序,即可得到结果,该方法时间复杂度O(n),空间复杂度原创 2015-11-14 18:44:46 · 2083 阅读 · 0 评论 -
动态规划算法(后附常见动态规划为题及Java代码实现)
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通...原创 2015-12-06 16:52:52 · 20188 阅读 · 5 评论