2019年初考核題
本篇是繼昨天我們部門(技術部)的年初能力考核後,整理出來的文章。以此鞭策自己在今年的工作上,樹立清晰可見的目標,已達到最終預期的效果。
題目:
1.有一個沙灘,有無窮多的沙子。現有2個空容器,分別可裝為5kg和6kg的沙子。問題是如何只用這2個容器取得3kg的沙子?(10分)

2.燒一根不均勻的繩從頭燒到尾總共需要1個小時,如何用它來判斷半個小時? 現在有3條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?(10分)

3.你有四個裝藥丸的藥罐,其中有一個藥罐的藥丸被汙染,每個正常的藥丸都有一定的重量,被汙染的藥丸是沒被汙染的重量+1,只稱量一次,如何判斷哪個藥罐的藥被汙染了? (10分)
給四個罐子編上號,1、2、3、4.然後1號拿一個,2號拿2個,3號拿3個,4號拿4個,稱一下,若是都沒被汙染,應該重10個重量,若是11個重量就是1號罐,12就是2號罐,13就是3號罐,14就是4號罐(此題不太嚴謹,取相對重量)
4.實現一個演算法,確定一個英文字元字串的所有字元是否全都不同。 給定一個string iniString,字串的長度小於等於100,請返回一個bool值,True代表所有字元全都不同,False代表存在相同的字元。(20分)
測試樣例: “aeiou” 返回:True “BarackObama” 返回:False
思路:把那個字串全部取出來放進一個數組中,然後對那個陣列去重得到一個新陣列,前後兩個陣列長度一對比,如果一樣,就沒重複,返回true;如果不一樣,就返回false。
function test(str){ var arr=[];//把字串中所有元素 for(var i=0;i<str.length;i++){ arr.push(str[i]); }; //arr = str.split("").join(""); //這個是聽取同事建議,將上一步迴圈換成更加完美的轉成陣列的方式 var newArr = Array.from(new Set(arr)); if(arr.length == newArr.length){ return true; }else{ return false; } } test("aeiou");//true; test("BarackObama");//false; 複製程式碼
5.實現一個演算法,翻轉一個給定的字串。 給定一個string iniString,符串的長度小於等於100,請返回一個string,為翻轉後的字串。 (20分)
測試樣例:
"This is nowcoder"返回:"redocwon si sihT" 複製程式碼
var str = "This is nowcoder"; console.log( str.split("").reverse().join("") );//redocwon si sihT 複製程式碼
劃重點對自己的英語水平,一直很自信,沒成想最後居然把reverse寫成deverse了,最有把握的一道題也涼涼了……
6.利用字元重複出現的次數,編寫一個方法,實現基本的字串壓縮功能。比如,字串“aabcccccaaa”經壓縮會變成“a2b1c5a3”。若壓縮後的字串沒有變短,則返回原先的字串。 給定一個string iniString為待壓縮的串(長度小於等於100),保證串內字元均由大小寫英文字母組成,返回一個string,為所求的壓縮後或未變化的字串。(30)
測試樣例
"aabcccccaaa"返回:"a2b1c5a3" "welcometonowcoderrrrr"返回:"welcometonowcoderrrrr" 複製程式碼
//取出字串,判斷重複停止,新增到新字串中 function solution(str) { if(typeof str !== "string"){//型別不為字串返回空 return ''; } if (str.length <= 1){//直接返回源字串 return str; } let newStr = ''; let s = str.charAt(0); let num = 1; //跳過第一個 let total = str.length; for (let i = 1; i < total; i++) { let nowS = str.charAt(i); if (nowS === s) { num = num + 1; // 增加數量 if (i + 1 === total) { newStr += `${s}${num}`; // 遍歷結束時,拼接最後的字串 } } else { newStr += `${s}${num}`; // 拼接字串 num = 1; // 重置為1 s = nowS; // 轉為下一個字元s } } if (newStr.length >= str.length) {// 生成的字串長度大於等於源字串 返回源字串 否則返回生成的字串 return str; } else { return newStr; } }; console.log( '輸出:', solution('welcometonowcoderrrrr'), solution('aabcccccaaa'), );//輸出: welcometonowcoderrrrr a2b1c5a3 複製程式碼
結語:
韓老師點評到:類似於前三道的題目,在考公務員、智力競賽這些方面都可以見到,平時也可以多瞭解瞭解,對開發智力也頗有幫助;後面三道,其實自己做過很多遍,也許因為各種不確定因素,總是展現出了不完美的一面。希望今後的葉葉再接再厲!