九月迅雷,华为,阿里巴巴,最新笔试面试十题解题报告
写在前面:近观大神July的http://blog.youkuaiyun.com/v_july_v/article/details/11921021的面试题分享,自己做了一些。
8月15日,百度2道面试题:
1、来自《编程之美》的概率题:一个桶里面有白球、黑球各100个,现在按下述规则取球:的
i 、每次从通里面拿出来两个球;
ii、如果取出的是两个同色的求,就再放入一个黑球;
ii、如果取出的是两个异色的求,就再放入一个白球。
问:最后桶里面只剩下一个黑球的概率是多少?
http://blog.youkuaiyun.com/maoxunxing/article/details/13095869
9月5日,华为2014校园招聘的机试题目
2、通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
public class Conpress {
public void swap(StringBuffer stringBuffer,int left,int right){
char temp=stringBuffer.charAt(left);
stringBuffer.setCharAt(left, stringBuffer.charAt(right));
stringBuffer.setCharAt(right, temp);
}
public String conpressString(String string) {
StringBuffer stringBuffer=new StringBuffer(string);
int length=string.length();
if (length<=1) {
return string;
}
int fast=1,low=1;
int count=1;
char key=stringBuffer.charAt(0);
while (fast<=length) {
if (fast==length) {
if (count>1) {
stringBuffer.setCharAt(low, (char) (count+'0'));
swap(stringBuffer, low, low-1);
low++;
}
}else {
if (key!=stringBuffer.charAt(fast)) {
if (count>1) {
stringBuffer.setCharAt(low, (char) (count+'0'));
swap(stringBuffer, low, low-1);
low++;
}
stringBuffer.setCharAt(low++, stringBuffer.charAt(fast));
key=stringBuffer.charAt(fast);
count=1;
}else {
count++;
}
}
fast++;
}
stringBuffer.setLength(low);
String result=new String(stringBuffer);
return result;
}
@Test
public void test(){
String string="cccddecccc";
// String string="pppppppp";
// String string="adef";
System.out.println(conpressString(string));
}