면접 에서 흔히 볼 수 있 는 js 알고리즘 문제

5796 단어 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 + ',';
})
위의 해법 은 정규 를 사용 하 는 것 이 니,물론 너 도 다른 방법 을 사용 할 수 있다.
이상 은 면접 에서 흔히 볼 수 있 는 문제 입 니 다.누락 될 수 있 습 니 다.환영 하 다
보기 만 하지 마.직접 써 봐 야 지,그렇지 않 으 면 네가 볼 줄 알 았 을 거 야.사실 네가 쓰 라 고 해도 너 는 여전히 쓸 수 없다.
오케이.이렇게.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기