算法
sherry_Rui
这个作者很懒,什么都没留下…
展开
-
排序算法之插入排序
插入排序原理:每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。算法实现:从第二个数开始遍历,依次比较每个数和这个数之前所有数的大小关系;若前一个数比该数大,则将前一个数后移一位,知道前一个数比该数小(或等于位置)。 public int[] insert(int[] unsorted){ for(int i = 1;i < unsorted原创 2016-03-17 11:21:42 · 399 阅读 · 0 评论 -
ConcurrentHashMap
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2016-04-05 13:20:54 · 368 阅读 · 0 评论 -
JVM Stack和Heap、GC
在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题。 一般,JVM的内存分为两部分:Stack和Heap。 Stack(栈)是JVM的内存指令区。Stack管理很简单,push一定长度字节的数据或者指令,Stack指针压栈相应的字节位移;pop一定转载 2016-04-05 14:40:27 · 970 阅读 · 0 评论 -
Java List去重的两种方法
通过Iterator遍历,利用remove方法移除:public void testList() { List list=new ArrayList(); list.add(1); list.add(2); list.add(4); list.add(1); list.add(2); list.add(5); list.add(1); List listTemp= n原创 2016-04-05 19:32:12 · 2613 阅读 · 0 评论 -
多线程并发处理
一、Synchronized从一个例子入手:实现一个银行账户取钱场景:第一个类:Account.java账户类:package cn.edu.byr.test;public class Account { private String accountNo; private double balance; public Account(){} public A原创 2016-04-06 11:26:40 · 632 阅读 · 0 评论 -
归并排序
基本思想归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2原创 2016-03-23 11:34:01 · 442 阅读 · 0 评论 -
网易网考题“9和g”
一个字符串中9和g模糊,如果同等对待,输出所有可能性public class Solution { public static String toFullBinaryString(int num,int size) { char[] chs = new char[size]; for(int i = 0; i < size; i++) {原创 2016-03-25 21:46:44 · 454 阅读 · 0 评论 -
快速排序
快速排序算法介绍快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。基准元素的选取对算法的效率影响很大,最好的情况原创 2016-04-16 14:43:07 · 825 阅读 · 0 评论 -
面试问题汇总(持续补充中)
1、抽象类和接口区别抽象类:包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别: 1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。 2)抽象类不能用来创建对原创 2016-03-22 20:06:04 · 550 阅读 · 0 评论 -
字符串的排列
剑指Offer 28题:题目:输入一个字符串,输出该字符串的所有排列。例如,输入'abc',输出abc、acb、bac、bca、cab、cba。递归解决:关键在于递归条件、边界条件、去重(例如‘aa’)package cn.edu.bupt.sherry;import java.util.ArrayList;import java.util.HashSet;原创 2016-05-24 22:22:07 · 449 阅读 · 0 评论 -
HashMap实现原理分析
注:此文为转载,原文地址:点击打开链接1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间转载 2016-03-30 09:30:38 · 397 阅读 · 0 评论 -
输入一个集合,输出这个集合的所有子集
package cn.edu.bupt.sherry;import java.util.ArrayList;import java.util.Scanner;public class Test { /* * 二级制 001 ——> index = 0 {list.get(0)} */ public static ArrayList> getSubsets2(ArrayList原创 2016-05-09 21:28:42 · 3971 阅读 · 0 评论 -
n&(n-1)妙用
n&(n-1)的妙用 (转)今天无聊拿起《编程之美》看了下,发现原来n&(n-1)还有很多妙用。原理:n与n-1的区别在于,对于n,从右向左数的第一个"1"开始一直到右,和n-1,完全相反n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000可以看到原本最原创 2016-03-11 16:21:45 · 508 阅读 · 0 评论 -
网易2016暑期实习笔试题--蛇形矩阵
蛇形矩阵是N*N方阵;eg:N = 3;输出:1 2 38 9 47 6 5……import java.util.Scanner;public class SnakeMatrix { static int N; public static int getValue(int i,int j){ if(i == 1 && j == 1)原创 2016-04-04 00:12:01 · 807 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡算法原理:重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序的过程图:算法实现:最多比较n-1次每次比较次数 [0,n-i-1],因为之前i次已经保证最后i个数字是按照顺序排好的,且为较大原创 2016-03-17 13:00:21 · 422 阅读 · 0 评论 -
集合类的体系结构
原文地址:点击打开链接1. Collections(工具类) 和 Collection(集合顶层接口) 的区别首先, “Collection” 和 “Collections” 是两个不同的概念. 从下面几幅图可知,“Collection”是集合继承结构中的顶层接口,而 “Collections” 是提供了对集合进行操作的强大方法的工具类.图12. Collection继转载 2016-03-31 10:28:47 · 1782 阅读 · 0 评论 -
JAVA GC算法
GC判断对象是否存活算法1> 引用计数算法2> 根搜索算法(GC Root)GC垃圾收集算法1> 标记清除算法(Mark-Sweep):分为标记和清除两个阶段,首先标记出可以回收的对象,标记完后统一回收。缺点如下: a) 效率低:标记和清除过程效率都不高; b) 空间问题:清除之后产生大量不连续的内存碎片。转载 2016-03-31 11:39:23 · 544 阅读 · 0 评论 -
HashMap,LinkedMap,TreeMap的区别
原文地址:点击打开链接HashMap,LinkedHashMap,TreeMap都属于MapMap 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。 HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Nu转载 2016-03-31 16:33:14 · 4992 阅读 · 0 评论 -
HashCode和equal方法
equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。而hashCode()是对象或变量通过哈希算法计算出的哈希值。之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。 两个obj,如果equals()相等,hashCode原创 2016-03-31 21:42:27 · 532 阅读 · 0 评论 -
Hash
最近面试过程中两次被问到HashCode以及Java JDK中对Hash的实现,下面总结一下关于Hash的一些基础知识:1、什么是Hash?hash函数:Hash,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。原创 2016-04-02 11:28:26 · 615 阅读 · 0 评论 -
二叉树搜索
二叉树搜索的目的是:在某个数组中快速搜索某个元素;要求数组已经进行了排序(本例中是升序);最简单的方法是顺序搜索:即从第一个位置开始,依次向后检查,知道找到所需元素为止。顺序搜索平均时间是n/2;如果采用二叉树搜索,则搜索时间为logn;核心思想是:将中间元素和搜索值进行比较,如果中间值小于搜索值,则递归调用二叉搜索算法,搜索mid+1到last的区间;如果大于搜索原创 2016-04-03 14:45:14 · 605 阅读 · 0 评论 -
Java十进制转二进制,递归算法
//用递归算法求一个int的二进制字符串;//思路是:递归最简单情况(递归出口)是0和1;其余的是先调用递归算出n/2的二进制字符串,然后加上n时的位数(n % 2);import java.util.Scanner;public class WriteBinary { public static String writeBinary(int n){ String binary = "";原创 2016-04-03 15:13:47 · 4367 阅读 · 0 评论 -
递归算法应用值判断字符串是否为回文
/* * 判断一个字符串是否是回文; */public class Palindrome { public static boolean isPalindrome(String s,int i,int j){ if(i > j) throw new IllegalArgumentException(); if(i == j) return true; else{原创 2016-04-03 15:27:52 · 3820 阅读 · 0 评论 -
递归算法分钱问题
/** * 开发一个递归方法,确定将一定数量的钱(以美分为单位)转换成两角五分的硬币,一角硬币,五分和一分硬币的方法总数。 * 例如,假设总钱数为17分,那么共有6种方法。 * 1角,7一分 * 1角,1五分,2一分 * 3五分,2一分 * 2五分,7一分 * 1五分,12一分 * 17一分 * * 为方便起见,可以理解为用25,10,5,1分解一个数,求一共有多少原创 2016-04-03 16:14:37 · 1190 阅读 · 0 评论 -
Http状态码
完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用reque原创 2016-04-03 23:21:59 · 1345 阅读 · 0 评论 -
ConcurrentHashMap原理详解
下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开转载 2016-05-20 16:15:58 · 11580 阅读 · 1 评论