면접 에서 흔히 볼 수 있 는 js 알고리즘 문제
네가 아무리 많이 쓰 더 라 도 어쨌든 할 줄 알 아야 한다.안 그러면 필기시험 힘 들 어.
직접 면접 을 보 더 라 도 면접 관 이 직접 알고리즘 문 제 를 쓰 라 고 하 는 경우 도 있다.
필기시험 시간 이 제한 되 어 복잡 한 문 제 를 낼 수 없 기 때문에 필기시험 을 아무리 내 도 아래 의 몇 가지 문 제 를 떠 나 지 않 을 것 이다.
쓸데없는 말 은 그만 하고,다음은 주요 한 몇 가지 산법 문 제 를 열거 하 겠 다.
1.정렬
보통 배열 을 주 고 순 서 를 매 긴 다.어떤 것 은 작은 것 에서 큰 것 까지,어떤 것 은 큰 것 에서 작은 것 까지.잘 봐 야 돼.다음은 모두 어 릴 때 부터 큰 정렬 알고리즘 이다.
거품 법
var arr = [3,6,1,2,5];
var temp;
for(var i= 0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i] > arr[j]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
빠 른 정렬 법
function quicksort (arr){
if(arr.length<=1){
return arr;
}
var left = [];
var right = [];
var middle = arr[0];
for(var i=1;i<arr.length;i++){
if(arr[i]<middle){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quicksort(left).concat([middle],quicksort(right));
}
주의:빠 른 속도 로 거품 을 사용 하지 마 세 요.정말 기억 하지 못 해서 거품 을 냈 다.빠 른 정렬 디자인 부터 재 귀 까지 면접 관 들 은 재 귀 알고리즘 을 살 펴 보고 싶 어 합 니 다)2.배열 재 활용
이 문 제 는 당신 이 배열 요소 의 출현 횟수 를 저장 하여 중요 한 문 제 를 해결 할 수 있 는 지 를 고찰 하 는 것 입 니 다.물론 해법 도 많 지만 다음은 해법 이다.
Array.prototype.unique = function(){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
var arr = [112,112,34,' ',112,112,34,' ','str','str1'];
alert(arr.unique());
3.js 의 복사이 문 제 는 깊 은 복사 와 얕 은 복사 가 잘 구분 되 지 않 는 다 는 것 이다.
var a = {name:'Tom'}; var b = a; b.name = 'Peter';
a.name=?정 답 은 Peter 입 니 다.만약 당신 의 답 이 Tom 이 라면 js 의 깊 은 복사 본 을 잘 보 세 요.
복사 할 것 이 배열 이 라면:
slice 와 concat 는 배열 을 직접 깊이 복사 할 수 있 습 니 다.
arr.slice();
arr.concat();
다음은 해법.물론 나 보다 더 잘 쓴 게 있 을 거 야.
function deepCopy(source){
var result = {};
for(var i in source){
if(typeof source[i] === "object"){
result[i] = deepCopy(source[i]);
}else{
result[i] = source[i];
}
}
return result;
}
4.문자열 의 하위 문자열 위치 가 져 오기
function appear(str,str_target){
var n = 0;
var result = [];
while(str.indexOf(str_target,n)!=-1 && n < str.length){
result.push(str.indexOf(str_target,n));
n = str.indexOf(str_target,n) + str_target.length;
}
return result;
}
var arr = appear('abascbascbabasbascbascascbab','ab');
console.log(arr);
5.수량 을 알 수 없 는 배열 의 조합 알고리즘좋아,이 문 제 를 설명해 봐.이 문 제 는 현실 에서 확실히 쓸 수 있다.특히 쇼핑 몰 사 이 트 를 만 들 때 sku 알고리즘 은 정말 자주 만 납 니 다.
이 문제 의 뜻 은 바로[1,2,3],[4,5]...의 불확실 한 개수 의 배열 을 옮 겨 다 니 며 조합 하여[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]이렇게 구성 합 니 다.그리고 배열 이 많 을 수록 팀 이 나 올 수록 많 을 것 이다.
그럼 어떻게 했 어 요?인터넷 에서 관련 알고리즘 을 찾 아 봤 는데 좋 은 것 을 찾 지 못 해서 제 가 직접 썼어 요.그래도 약간의 결함 이 있 을 수 있 으 니,모두들 아 쉬 운 대로 보아 라.
더 좋 은 댓 글 이 있 습 니 다.댓 글 좀 가르쳐 주세요.
function group(arr,re){
if(arr.length <=0){
return re;
}
if(!re){
var arr = arr.slice();
var re = arr.shift();
return group(arr,re);
}else{
var now = arr.shift();
var newre = [];
for(var j=0;j<now.length;j++){
for(var k=0;k<re.length;k++){
var temp = [];
if(re[k] instanceof Array){
temp = re[k];
}else{
temp.push(re[k]);
}
newre.push(temp.concat(now[j]));
}
}
return group(arr,newre);
}
}
var arr = [['a','b','c'],['e','d','f'],['h','i'],['j','k','l','m']];
// var arr = [['a','b','c'],['e','d','f'],['h','i']];
// console.log(arr);
var result = group(arr);
console.log(result);
6.lazyMan(이 문 제 는 많은 내용 을 고찰 했다)이 문 제 는 스스로 바 이 두 합 시다.바 이 두 lazy Man 면접 문제 만 있 으 면 찾 아 낼 수 있 을 거 예요.
7.함수 fn(Number n)을 작성 하여 숫자 를 대문자 로 변환 합 니 다.예 를 들 어 123 을 입력 하고 123 을 출력 합 니 다.
좋 습 니 다.이 문 제 는 제 가 본 사이트 의 어떤 문장 을 잊 어 버 렸 습 니 다.정말 재 미 있 었 습 니 다.
다음은 그의 코드 다.
function fn(n){
if(!/^([1-9]\d*)/.test(n)){
return ' ';
}
var unit = ' ';
if(n.length > unit.length){
return ' ';
}
var newStr = '';
var nlength = n.length;
unit = unit.substr(unit.length - nlength);
for(var i = 0; i < nlength; i++){
newStr += ' '.charAt(n[i]) + unit.charAt(i);
}
newStr = newStr.substr(0,newStr.length-1);
newStr = newStr.replace(/ ( | | )/g,' ').replace(/( )+/g,' ').replace(/ ( | )/g,'$1');
return newStr;
}
console.log(fn('205402002103'));
8.부동 소수점 왼쪽 의 수 를 세 자리 마다 쉼표 를 추가 하 는 방법12000000.11 에서 12,000,000.11 로 전환 하면
result = num && num.toString().replace(/(\d)(?=(\d{3})+\.)/g,function($1,$2){
return $2 + ',';
})
위의 해법 은 정규 를 사용 하 는 것 이 니,물론 너 도 다른 방법 을 사용 할 수 있다.이상 은 면접 에서 흔히 볼 수 있 는 문제 입 니 다.누락 될 수 있 습 니 다.환영 하 다
보기 만 하지 마.직접 써 봐 야 지,그렇지 않 으 면 네가 볼 줄 알 았 을 거 야.사실 네가 쓰 라 고 해도 너 는 여전히 쓸 수 없다.
오케이.이렇게.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.