HashtableJava编程中较为常用的容器类之一,在面试时常常被与HashMap作比较!

       为什么要常与HashMap作比较呢?因为他们的源码是极其相似啊,网上也常常有人说HashMap是基于Hashtable实现的吧,因为HashtableJava1.0中就有了,但是HashMapJava1.2才出现。
       本文讲解Hashtable时不再累赘,实现的原理大致都和HashMap一样,这里主要讲HashtableHashMap几个不同点。

不支持null

       我们知道HashMap是支持null的键和值的,每次遇到null时直接用0来作桶号,来看下Hashtablenull的处理

Read More

13、将一个从大到小的数组,用以下排序方法排序成从小到大的,______最快。
A.插入排序
B.冒泡排序
C.快速排序
D.堆排序

       该题假如是单问算法复杂度,无疑是C和D,都是O(n*logn),但是在初始化时降序的情况下,就得另外考虑了,其实可以发现这个降序的数组对C,和D并无价值,并且还增加了排序时的比较次数,现在来看插入排序:

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序

       根据待排序数组是降序的情况下很容易想到插排在每次插入是只需要比较第一个元素即可,因为前面的元素都比他大,一般插入排序是基于数组实现的,每次在插入一个元素时需要将插入后的元素都向后移动一位,如果这样其复杂度也不会减少,这种可以下可以将插排基于链表来实现,这样就不需要移动数组了。

Read More

HashMapJava编程中最常用的容器类之一,它是通过数组+链表实现的,在面试时常常被问实现原理以及与HashTable作比较!

       HashMap是可以存储键值key-value对的容器,他是基于数组+链表的方式实现的,在遇到数组容量不够时也会执行扩容操作,HashMap具有插入、删除操作几乎为O(1)的效率,但是在迭代器中遍历取值时无法保序,接下来文本将从HashMap的构造、put、remove、iterator等方向进行源码的学习。

私有变量解析

       在HashMap的源码中定义的私有变量比ArrayList多很多

Read More

VectorJava编程中最常用的容器类之一,它是基于动态的数组实现的,在面试时常常被与ArrayList作比较!

       看过源码的小伙伴可能有相同的感觉:进入Vector.Java会顿一会儿,还以为自己点错进去ArrayList的源码文件了呢!是的,VectorArrayList的实现基本相似,同样是基于动态数组,同样是需要扩容,本文在接下来的源码分析中与ArraryList重复的部分不再累赘,如需要了解的同学请点入进ArrarList源码分析

Vertor的1倍扩容

还记得ArrayList每次扩容为元数组的0.5倍不?Vector在进行扩容操作时与ArrayList略微不同

Read More

ArrayList是Java编程中最常用的容器类之一,它是基于动态的数组实现的,在面试时常常被与VectorLikedList作比较!

       本文将主要从ArrayList的构造函数、addremove,iterator为入口进行源码分析

构造函数

       在看构造函数之后先看下一下ArrayList类的三个重要私有变量

Read More

二叉树

二叉树是一种较为常见的数据结构,不了解的点我,他在各大公司的笔试/面试中经常出现,特别是它的遍历。
二叉树的遍历共三种:

  1. 前序遍历:根节点->左孩子节点->右孩子节点
  2. 中序遍历:左孩子节点->根节点->右孩子节点
  3. 后续遍历:左孩子节点->右孩子节点->根节点

Read More

花了接近两天终于将这个博客搭建完成,特此记录下!
本站在搭建时本地使用Windows系统,托管在Github上,文本只是记录本站搭建期间出现的一些情况,完整教程还请自行去百度或者Google。

Hexo

Hexo 是一个简单地、轻量地、基于Node的一个静态博客框架。通过Hexo我们可以快速创建自己的博客,仅需要几条命令就可以完成。

问题1

在使用hexo deploy部署时一直没反应,后来看了[2]才知道是配置中每个冒号后面需要加一个空格,如果还是不行就尝试删除.deploy文件试试

问题2

多说评论系统中data-thread-key之类的这几个参数使用
data-thread-key="<%= page.path %>" data-title="<%= page.title %>" data-url="<%= page.permalink %>"
来代替

问题3

在Windows下进行hexo deploy 时需要安装cygwin,感觉配置这个略微麻烦,就直接使用github for windows的客户端,进行账号密码登录
之后直接使用Git shell就可以进行deploy操作了

问题4

在安装rss和sitemap插件时使用 npm install hexo-generator-feed -save 和npm install hexo-generator-sitemap --save
注意两个save,很多教程上没带这个

问题5

如果在部署到github上执行hexo deploy时报error deployer not found:github 的错误,请安装npm install hexo-deployer-git --save

感谢参考

  1. http://yangjian.me/pacman/hello/introducing-pacman-theme/
  2. http://zipperary.com/categories/hexo/
  3. http://www.v2ex.com/t/175940
    最后感谢jacman的作者大神Jack

LeetCode地址:https://leetcode.com/problems/number-of-1-bits/

Problem:
Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

思路

  • 使用两次翻转即可,第一次以k分割线翻转[4,3,2,1,7,6,5],第二次全部翻转[5,6,7,1,2,3,4]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
void inverse(int nums[],int start,int end)
{

int m=(start+end)/2;
int temp;
for(;start<=m;start++,end--)
{
temp=nums[start];
nums[start]=nums[end];
nums[end]=temp;
}
}

void rotate(int nums[], int n, int k) {
k=k%n;
if(n-k-1>=0)
{
inverse(nums,0,n-k-1);
}
inverse(nums,n-k,n-1);
inverse(nums,0,n-1);
}


};

本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权kubiCode,并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言

LeetCode地址:https://leetcode.com/problems/number-of-1-bits/

Problem:
Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).

Follow up:
If this function is called many times, how would you optimize it?

思路

  • 输入数据向右移取最低位,结果变量与最低位进行或操作,再向左移
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
int i=0;
uint32_t ret=0;
for(;i<32;i++)
{
int x=n&0x1;
ret=ret<<1;
ret=ret|(n&0x1);
n=n>>1;
}

return ret;
}
};

本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权kubiCode,并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言