基本实现是Array+Linked实现的,
如果发现某个支链太长会将其变成红黑树。(才发现红黑树这个事情是1.8才加进入的。。我们以前上算法可都说过这个基本优化吧。。)
哈希值:
(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
基本实现是Array+Linked实现的,
如果发现某个支链太长会将其变成红黑树。(才发现红黑树这个事情是1.8才加进入的。。我们以前上算法可都说过这个基本优化吧。。)
哈希值:
(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
两数相加,保证为正整数。一定会超过long long。所以有如下程序。。。同时这也是某次面试的错。。。
思路如下:
两个字符串去做反转,然后从0为开始相加,遇到满十做进位记号。
记得为了最后有可能的进位,要将数组多申请一个位置(这里是个坑)
最后再反转数组然后转换成字符串返回即可
public static String Bigcamladd(String a, String b) {
char[] A = new StringBuffer(a).reverse().toString().toCharArray();
char[] B = new StringBuffer(b).reverse().toString().toCharArray();
boolean isOver10 = false;
int resultLength = A.length > B.length ? A.length : B.length;
int shortOne = A.length < B.length ? A.length : B.length;
int[] result = new int[resultLength + 1];
for (int i = 0; i <= resultLength - 1; ) {
if (i < shortOne) {
int tmp = A[i] + B[i] - 2 * '0';
if (isOver10) tmp += 1;
if (tmp >= 10) isOver10 = true;
else isOver10 = false;
result[i] = tmp % 10;
} else {
result[i] = A.length > B.length ? A[i] - '0' : B[i] - '0';
}
i++;
}
if (isOver10) result[resultLength] = 1;
StringBuffer buffer = new StringBuffer();
for (int i : result) {
buffer.append(i);
}
return buffer.reverse().toString();
}
不得不再感叹一次,Java的String类真特么的好用阿。。。。
这个特别容易想,就是时间上很不能接受
我们知道对于26个字母的组合,那么每个字母要么选要么不选两种情况。
所以我们用一个int[26]的数组来代表一个组合。其中的值要么是0,要么是1.
那么就有2^26种组合,我们可以用十进制来计数,然后转换成二进制即,我们遍历2^26次,将所有的数转换成二进制并存储好就得到了字母表所有的组合,所以代码如下:
筛数法。。。不要问我证明了。。。我要好好想想
public static int[] findPrimenumber(int N){
int[] primeNums = new int[N+1];
for(int i=0;i
好吧。。我承认我当时准备不够充分。。所以咯。在这里记录下来吧。。。
首先我们看一下Java提供Split函数是怎么用的,
Here is the syntax of this method:
public String[] split(String regex, int limit) or public String[] split(String regex)
Here is the detail of parameters:
regex — the delimiting regular expression.
limit — the result threshold which means how many strings to be returned.
It returns the array of strings computed by splitting this string around matches of the given regular expression.
如果说,regex只是单一的符号当然容易解决了,那么考虑一下,这个符号不是单一的呢,而是char[]呢。
我们从字符匹配中借鉴思想来完成。
我们有两个字符串。
用BF的方式匹配,如果完全匹配成功则清空StringBuffer并将其放进一个ArrayList里面,否则一直匹配。
代码如下