몇 가지 알고리즘과 해결 방법

4957 단어 javascriptbeginners
인터뷰를 준비하기 위해 나는 내가 풀었던 알고리즘을 기록하기 시작했다. 이들 중 대부분은 Code Signal에서 가져온 것이며 Javascript로 되어 있습니다. 각 단계에 대한 내 사고 과정을 설명합니다.

배낭 빛



Given two items with differing weights and values, write an algorithm to carry the maximum value without exceeding your knapsack's weight.



최대값 변수 시작

    let maxVal = 0; 

가중치가 같으면 둘 다 최대값에 추가합니다.

    if(weight1 + weight2 <= maxW){
        maxVal = value1 + value2
    } 

그렇지 않은 경우 다른 모든 조합을 확인하십시오.


    else {
        if(weight1 <= maxW && value1 > value2){
            maxVal = value1
        } else if (weight2 <= maxW && value2 > value1) {
            maxVal = value2
        } else if (weight1 > maxW && weight2 <= maxW){
            maxVal = value2
        } else if (weight2 > maxW && weight1 <= maxW){
            maxVal = value1
        } else if (value1 === value2 ){
            maxVal = value1
        }
    }

최대값을 반환합니다.

    return maxVal

숫자의 원



Consider integer numbers from 0 to n - 1 written down along the circle in such a way that the distance between any two neighboring numbers is equal (note that 0 and n - 1 are neighboring, too).

Given n and firstNumber, find the number which is written in the radially opposite position to firstNumber.



해결책



거리를 2로 나누어 중간점 찾기(반올림)

let halfway = Math.round(n/2)

firstNumber에 중간 지점 추가

let total = firstNumber + halfway

숫자가 전체보다 작으면 답입니다. 그렇지 않은 경우 총계에서 거리를 뺍니다.

  if(total >= n){
        return total - n
    } else {
        return total
    }

교대 합계



Sum alternating numbers in an array.



해결책



합계를 정의합니다.

 let total1 = 0
 let total2 = 0    


인덱스를 사용하여 대체 숫자를 추가하려면 반복합니다.

   for(let i = 0; i < a.length; i++){
        if(i % 2 == 0){
            total2 += a[i]
        } else {
            total1+= a[i]
        }

푸시 합계는 새 배열입니다.

let newArray = []
    newArray.push(total2, total1)
   return newArray


가장 긴 문자열



Given an array of strings, return another array containing all of its longest strings.



해결책



가장 긴 문자열을 모두 저장할 배열을 만듭니다.
가장 긴 문자열의 길이를 유지하는 len 값을 만들고 0으로 설정합니다.

var len = 0; 
var longest = []; 

문자열 배열을 반복합니다. 가장 긴 문자열을 찾아 len 값으로 설정합니다.

for (var i = 0; i < inputArray.length; i++){
        if(inputArray[i].length > len){
            len = inputArray[i].length 
        }
    }

별도의 for 루프에서 배열을 반복합니다. 문자열의 길이가 len 값과 같으면 가장 긴 배열로 푸시합니다.

   for (var j = 0; j < inputArray.length; j++){
        if(inputArray[j].length === len){
            longest.push(inputArray[j])
        }
    }

가장 긴 배열을 반환합니다.

 return longest

isLucky



Given an even integer, return true if the first half of numbers equals the second half.



해결책



정수 배열 만들기


    const arr = [] 
    while (n > 0){
        let lastDigit = n % 10 
        arr.push(lastDigit)
        n = Math.floor(n/10)
    }


배열을 두 부분으로 나눕니다.

    const half = Math.ceil(arr.length / 2);
    const firstHalf = arr.splice(0, half)
    const secondHalf = arr.splice(-half)

각 절반의 합계를 합산합니다. 합계가 일치하면 true를 반환


    let totalOne = 0; 
    let totalTwo = 0;
    for(let i = 0; i < firstHalf.length; i++){
        totalOne += firstHalf[i]
    }

    for(let i =0; i < secondHalf.length; i++){
        totalTwo += secondHalf[i]
    }

    if(totalOne === totalTwo){
        return true
    } else {
        return false
    }

결론



이들 중 일부는 내가 얼마 전에 만들었고 DRY-er 코드를 만드는 몇 가지 최적화와 방법을 이미 볼 수 있습니다. 나는 또한 for 루프를 사용하는 것을 좋아한다는 것을 알아차렸습니다. 앞으로는 every, some 및 map과 같은 더 많은 기본 제공 메서드를 통합하고 싶습니다.

좋은 웹페이지 즐겨찾기