今天上午刷了幾道簡單題,自己用javascript做的。雖然時間很高內存佔用也不少😥,記錄一下自己思路。
1、給出由小寫字母組成的字符串 S,重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。在 S 上反覆執行重複項刪除操作,直到無法繼續刪除。(1047題)
在完成所有重複項刪除操作後返回最終的字符串。答案保證唯一。
/*
* 輸入:"abbaca"
* 輸出:"ca"
*/
var removeDuplicates = function(S) {
var arr=[];
for(let i=0;i<S.length;i++){
var val=S.charAt(i);
if(arr.length==0){
arr.push(val);
}else{
let k=arr[arr.length-1];
if(k===val){
arr.pop();
}else{
arr.push(val)
}
}
}
return arr.join(""); //轉爲字符串輸出
};
這題利用棧(數組)特性來實現。剛開始的思路做出來超時了,所以又換了個思路去考慮。題解是每次向棧中添加元素的時候判斷是不是和棧頂元素相同,如相同則不添加並且彈出棧頂元素,否則向棧中添加當前元素。
2、將十進制轉爲二進制,對二進制取反在求出十進制的整數。(主要考察二進制和十進制之間的轉換)
var bitwiseComplement = function(N) {
var arr=[];
var sum=0;
while(N!=0){
//利用unshift方法,每次向數組首部添加元素,這樣保證算出來的順序剛好是而二進制順序
arr.unshift(N%2);
N=Math.floor(N/2); //注意向下取整
}
for(let i=0;i<arr.length;i++){
if(arr[i]==1){
arr[i]=0;
sum+=arr[i]*Math.pow(2,arr.length-i-1); //注意此處轉十進制
}else{
arr[i]=1;
sum+=arr[i]*Math.pow(2,arr.length-i-1);
}
}
return arr;
};
3、求一個字符串的最長無重複子串
function findMaxLength(str){
var S=""; //用來存放最長字符串
for(let i=0;i<str.length;i++){
let val=str.charAt(i);
if(S.indexOf(val)==-1){
S+=val;
}else{
let n = S.indexOf(val);
S=S.substr(n+1)+val; //若相同,查找到位置
}
}
return S;
}
console.log(findMaxLength('abcdaafacse')) //'facse'
注:查找相同的情況下,比如 S=“abcd”,val=‘a’;去查找得出n=0。利用substr(開始位置)+當前元素 => S=“bcda”,這樣依次查找。
4、格式化數字
function formatNumber(n){
n = n+"";
let f = n.split('.')[1]; //針對有小數的情況,沒有小數的情況可以稍加判斷
let num = n.split('.')[0];
let count = num.length;
var arr=[];
while(count>=3){
arr.unshift(num.slice(count-3,count));
count-=3;
}
if(count){
arr.unshift(num.slice(0,count%3));
}
return arr.toString() + "." + f;
}
console.log(formatNumber(12345678.9))
最後一題上次面試的時候讓手寫了😄,其實前端面試時也不會說出太難的編程題,把leetcode上的簡單題刷刷就可以了。最重要的還是思路,思路,思路。做題得有思路,不然無從下手。