当前位置: 首页 > 面试经验 >

前端-笔试算法题

优质
小牛编辑
123浏览
2023-03-28

前端-笔试算法题

一、给定一个以字符串表示的非负整数 num,移除这个数中的K位数字,使得剩下的数字最小。

1首先,将字符串中的每个数字遍历一遍,并将它们存储在一个栈中。

2.遍历数字的同时,如果栈不为空且栈顶元素比当前数字大,那么就弹出栈顶元素,并将 k的值减一,表示已经移除了一个数字。

3.如果栈为空,或者栈顶元素比当前数字小,那么就将当前数字压入栈中。

4.当所有数字都被遍历完后,如果还有 k 个数字需要移除,就在栈中弹出 k 个元素。

5.构建结果字符串。从栈底开始遍历栈中的元素,如果当前数字是 0 且前面的数字都是 0那么就跳过这个数字。否则,将当前数字添加到结果字符串中。

6.如果结果字符串为空,就返回0”


function removeKdigits(num,k){
const stack = [];
for(const digit of num){
console.log("digit",digit);
while(stack.length > 0 && stack[stack.length - 1]> digit && k){
stack.pop();
k -= 1;
}
stack.push(digit);
}
for( ; k > 0 ; --k){
stack.pop();
}
let ans = "";
let isLeadingZero = true;
for(const digit of stack){
console.log("digit22",digit);
if(isLeadingZero && digit === '0'){
continue;
}
isLeadingZero =false;
ans+= digit;
}
return ans === ""? '0':ans;
}
console.log(removeKdigits('10200',1))//"200"

二、有效邮箱,leetcode里面的题 929. 独特的电子邮件地址


var numUniqueEmails = function(emails) {
const emailSet = new Set();
for (const email of emails) {
const i = email.indexOf('@');
let local = email.slice(0, i).split("+")[0]; // 去掉本地名第一个加号之后的部分
local = local.replaceAll(".", ""); // 去掉本地名中所有的句点
emailSet.add(local + email.slice(i));
}
return emailSet.size;
};

 类似资料: