• 等级
  • 31934 访问
  • 124 原创
  • 21 转发
  • 35612 排名
  • 11 评论
  • 83 获赞

72. Edit Distance

给你两个单词word1,word2,使用最少的次数将word1转化为word2。你只可以进行下面三种操作: 1、插入一个字符  2、删除一个字符  3、替换到一个字符。  递归求解(记忆化搜索) class Solution { int[][] memoized = null; // 备忘录 public int minDistance(String word1, Str...

2018-09-08 22:06:47

质数因子的求解

质因子(或质因数)在数论里是指能整除给定正整数的质数。根据算术基本定理,不考虑排列顺序的情况 下,每个正整数都能够以唯一的方式表示成它的质因数的乘积。下面求解某一个数的质因子的情况。 1. 分解为判断质数和求解因子 // 判断一个数是否为素数 private boolean isPrimer(int j) { if (j <= 1) return false; ...

2018-08-23 21:51:46

排序算法之基数排序

基于排序是一种很特别的排序方法,它采用多关键字排序思想(即基于关键字各位的大小进行排序),借助 “分配”和“收集”两种操作对单逻辑关键字进行排序。基数排序又分为最高位优先(MSD)和最低位优先(LSD) 排序。 基数排序:  public void sort(int[] array) { int max = 0; // 记录最大的数 for (int i=0; i&lt...

2018-08-23 20:15:35

排序算法之归并排序

“归并”是将两个或两个以上的有序表组合成一个新的有序表。假定待排序表含有n个记录,则可以看成是n个 有序的子表,每个子表的长度为1,然后两两归并,得到n/2个长度为12或1的有序表;再两两归并,...如此重复, 直到合并成一个长度为n的有序表为止。这种排序方法称为2-路归并排序。 归并排序: (基于分治法) public void mergeSort(int[] a, int le...

2018-08-23 20:02:27

排序算法之选择排序

选择排序的基本思想是:每一趟在后面n-i+1个待排序的元素中选取关键字最小的元素,作为有序子序列的第i 个元素,直到第n-1趟做完,待排序元素,只剩下一个,就不用再选择了。以简单选择排序和堆排序为例。  简单选择排序: public static int[] selectSort(int[] array) { int[] newArray = Arrays.copyOf(arr...

2018-08-23 19:18:13

排序算法之交换排序

交换,就是根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。,基于交换的排序 算法有很多。以冒泡排序和快速排序举例。 冒泡排序:  public static int[] bubbleSort(int[] array) { int[] newArray = Arrays.copyOf(array, array.length); for (int i = 0...

2018-08-23 17:49:48

java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?

据说服务有两种: 收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,这种为非阻塞。 那么,问题来啦: java的服务是属于那种形式呢,怎么区分?比如tomcat又是属于哪种呢?...

2018-08-23 10:38:34

Java实现同步的几种方式

转自 http://fangjian0423.github.io/2016/04/18/java-synchronize-way/ Java提供了很多同步操作,比如synchronized关键字、wait/notifyAll、ReentrantLock、Condition、一些并发包下的工...

2018-08-21 10:18:52

Java transient关键字讲解

    Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。       Java语言规范中指出:为了获得最佳速度,允许

2018-08-20 17:34:02

JAVA中ListIterator和Iterator详解

在使用Java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的时候可以使用。这两种迭代器有什么区别呢?下面我们详细分析。这里有一点需要明确的时候,迭代器指向的位置是元素之前的位置。 首先看一下Iterator和ListIterator迭代器的方法有哪些。 Iterator迭代器...

2018-08-20 13:01:09

关于迭代器在集合遍历中发生的并发修改异常

原因:迭代器是依赖于集合的,相当于集合的一个副本. 当迭代器操作的时候,如果发现和集合不一样,则抛出异常(并发修改异常) Exception in thread “main” java.util.ConcurrentModificationException:并发修改异常解决方案:   &nb...

2018-08-20 12:51:22

RandomAccess接口理解

根据javadoc上面的的解释是: RandomAccess 是一个标记接口,用于标明实现该接口的List支持快速随机访问,主要目的是使算法能够在随机和顺序访问的list中表现的更加高效。 我们可以简单的看下Collections下的binarySearch方法的源码: public static &...

2018-08-20 12:35:31

Java Collections.synchronizedMap方法分析

synchronizedMap()返回由指定映射支持的同步(线程安全的)映射。实际上该方法只是一个工具方法, 将传入Map的实现方法加一个同步(synchronized)锁代理,内部还是调用实现的对应方法. //Collections.synchronizedMap(Map<K, V>) public static <K,V> ...

2018-08-20 12:24:25

Java中的字符串连接符(+)

在Java中字符串是一个常用的东西,而其一个常用的操作是字符串的拼接,Java对此提供了一种非常直观的操作方式——即 + 操作符。 String str0 = "a"; String str1 = str0 + "b"; 如上的程序片段就实现了一个字符串的拼接,可以看到整个描述非常简洁,一目了然。学习Java的时候,这是接触到的第一种拼接字...

2018-08-20 12:02:54

HashMap到底是插入链表头部还是尾部

分析源码 分析链表插入的位置,重点是分析HashMap的put方法。 jdk1.6 put方法的代码如下: public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i ...

2018-08-15 11:06:48

死锁

死锁概念及产生原理    概念:多个并发进程因争夺系统资源而产生相互等待的现象。    原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。&nbs...

2018-08-14 12:51:55

UML类图及依赖,泛化,关联,聚合,组合,实现

UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 原文链接:https://www.cnblogs.com/LUO77/p/5785374.html 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。一个类...

2018-08-14 12:40:38

410. Split Array Largest Sum

 题目给的例子中,output为18,假如结果是17,那么对于nums数组分析得到的m的值必定是大于2的。 此时分成的数组是[7,2,5],[10], [8]。 也就是说output和m之间是负相关的。 public boolean guess(long mid, int[] nums, long m) { long sum = 0; long mm = 0; // 使...

2018-08-11 22:10:43

二分法解题思路

二分法的精髓:函数的单调性 +  计算内容重复 (注意:不同于分治) 根据区间范围,猜测答案的结果。  1. Sqrt(x)求平方根 public int mySqrt(int y) { int left = 0; int right = y; long mid = 0; // 区间范围[0, y] while (left <= right) { ...

2018-08-11 21:25:25

java静态代理与动态代理简单分析

转载自http://www.cnblogs.com/V1haoge/p/5860749.html 1、动态代理(Dynamic Proxy)   代理分为静态代理和动态代理,静态代理是在编译时就将接口、实现类、代理类一股脑儿全部手动完成,但如果我们需要很多的代理,每一个都这么手动的去创建实属浪费时间,而且会有大量的重复代码,此时我们就可以采用动态代理,动态代理可以在程序运行期间根据需要动态的...

2018-08-11 14:31:18

-Billy

关注
  • 中国