職位類(lèi)型:技術(shù)類(lèi)
機(jī)試時(shí)間:2015校招(2014年9月)
招聘公司:華為
機(jī)試共三道題,樓主寫(xiě)了一下解題思路,如果有什么錯(cuò)誤或者大家有什么別的解題方法,可以在評(píng)論中提出來(lái),大家互相交流探討。
1.括號(hào)合法性判斷
給定一個(gè)只有'('和')'的字符串,判斷其在語(yǔ)法邏輯上是否合法。
解答:這題只要判斷左括號(hào)和右括號(hào)的數(shù)是否相等即可。用兩個(gè)變量int a,b存儲(chǔ)左右括號(hào)數(shù)。一個(gè)for循環(huán)遍歷字符串,遇到左括號(hào)a++;遇到右括號(hào)b++。最后若a==b,合法;若a!=b,不合法。
2.整數(shù)排序
輸入一組大于等于0的整數(shù),根據(jù)從大到小的順序排序后輸出;如果排序后有連續(xù)數(shù)時(shí),只輸出連續(xù)輸?shù)淖畲蠛妥钚?shù)。輸入的所有整數(shù)都各不相同,即不用考慮兩個(gè)整數(shù)相同的情況。
如:輸入4,7,2,1,5,8,9,11
??? 輸出11,9,7,5,4,2,1
解答:第一步當(dāng)然是先排序,各種排序法都行。用Java的話最方便啦,調(diào)用Arrays.sort(int[]),一步完成(當(dāng)然這個(gè)是順著排,輸出的時(shí)候倒過(guò)來(lái)就行了)。接下來(lái)是去掉連續(xù)數(shù)的中間數(shù)字。注意排序后數(shù)組的頭和尾必然要輸出的,于是循環(huán)從1:length-2,判斷這些元素跟它前后的元素是否都相差1。
System.out.print(arr[length-1] ",");
for(i = arr.length - 2; i >0; i --){
if((arr== arr[i 1] -1)&&arr == arr[i-1] 1){
continue;
}
System.out.print(arr ",");
}
System.out.print(arr[0]);
3.設(shè)計(jì)一個(gè)定時(shí)器管理系統(tǒng),可以動(dòng)態(tài)啟動(dòng)、停止定時(shí)器,并能根據(jù)已失去的時(shí)長(zhǎng)自動(dòng)調(diào)整剩余的時(shí)間。
運(yùn)行時(shí)間限制:1Sec
內(nèi)存限制:無(wú)限制
輸入:?jiǎn)?dòng)定時(shí)器:starttimmer: ID, time
舉例:
starttimmer: 1, 1000
啟動(dòng)一個(gè)定時(shí)器,其ID為1,定時(shí)時(shí)長(zhǎng)time為1000ms
注:定時(shí)器ID用例保證非負(fù)整數(shù),定時(shí)時(shí)長(zhǎng)一定為正整數(shù)
停止定時(shí)器:stoptimmer:
ID
舉例:
stoptimmer:
1
停止一個(gè)ID為1的定時(shí)器
注:定時(shí)器ID用例保證非負(fù)整數(shù),如果停止的定時(shí)器ID不存在,則忽略。
逝去時(shí)長(zhǎng):elapse:
time
舉例:
elapse:
1000
時(shí)間逝去1000ms
注:用例保證時(shí)長(zhǎng)一定為正整數(shù)
輸入結(jié)束
end
輸出:
按啟動(dòng)順序輸出還沒(méi)有停止的定時(shí)器,如ID為1的定時(shí)器還有1000ms才結(jié)束
timer:
1, 1000
如果所有定時(shí)器都停止了,輸出none
none
樣例輸入:
starttimer:
1, 1000
starttimer:
2, 2000
elapse:
1000
end
樣例輸出:timer: 2,1000
這題看了幾遍才看懂,用了java的Timer,但是感覺(jué)不對(duì),不知道怎樣才能啟動(dòng)多個(gè)定時(shí)器, 怎么修改定時(shí)器的時(shí)長(zhǎng),以及怎樣檢測(cè)定時(shí)器的剩余時(shí)間。希望哪位大神來(lái)指教!