一、经典面试题目: 一个有小写英文字符组成的字符串,统计其中每个字符数量
String str = "abcdesjkjsadfoiqwejhjkahjsiuhaskhka";
int[] counter = new int[26];
for(int i=0; i<str.length(); i++){
counter[str.charAt(i)-'a']++;
}
System.out.println(Arrays.toString(counter));
二、自增运算 ++
经典面试题目:
int n = 5;
for(int i = 0; i<5; i++){
n = n++;
}
System.out.println(n);//5
解析:
n = 5;
n = n++;
// 规则: ++ 的有限远远高于赋值运算=,++先计算
// 1. 计算++(后++):
// 1. 先取出n的值5作为 n++ 表达式的值5
// 2. 将n的值增加1, n为6
// 2. 计算赋值 =, 将 n++ 的值5 赋值给n,n改变为5
三、将一个整数按照10进制进行拆分为个位数,如: 726633 拆分为 7、2、6、6、3、3
分析:
n = 726633
l = n%10; //3
n /= 10; //72663
l = n%10; //3
n /= 10; //7266
l = n%10; //6
n /= 10; //726
l = n%10; //6
n /= 10; //72
l = n%10; //2
n /= 10; //7
l = n%10; //7
n /= 10; //0
代码:
int n = 703383;
int[] digi=new int[10];
int i = digi.length-1;
do{
int l = n%10;
digi[i--]=l;
n /= 10;
}while(n!=0);
int[] nums = new int[digi.length-1-i];
System.arraycopy(digi, i+1, nums, 0, digi.length-1-i);
System.out.println(Arrays.toString(nums));
结果:
四、打乱一个数组(洗牌算法)
int[] ary = {1,2,3,4,5,6,7,9};
for(int i=ary.length-1; i>0; i--){
int j = (int)(Math.random()*i);
int t = ary[i];
ary[i] = ary[j];
ary[j] = t;
}
System.out.println(Arrays.toString(ary));