LeetCode 양치일기 해시 테이블 I

1. 효과적인 애너그램

주제 설명

여기에 이미지 설명 삽입

문제 해결 아이디어

이 질문은 해시 테이블의 아이디어를 사용하여 해결할 수 있습니다. 단어에는 26개의 문자가 있습니다. 해시 테이블을 나타내기 위해 길이가 26인 배열을 정의할 수 있습니다. 여기서 각 문자와 문자 a의 ASCII 값은 26개 문자의 위치를 ​​나타냅니다. 각 문자는 0이 아닙니다.

var isAnagram = function(s, t) {
   const countArr = new Array(26).fill(0)
   const zero = 'a'.charCodeAt()
   for(let i = 0;i<s.length;i++){
        countArr[s[i].charCodeAt() - zero]++
   }
   for(let i = 0;i<t.length;i++){
       countArr[t[i].charCodeAt() - zero] --
   }


   for(let i = 0;i<countArr.length;i++) {
       if(countArr[i]!==0){ // 一定要判断不等于0 之前判断小于0 会漏掉t字符串比s字符串长的情况
           return false
       }
   }

   return true
};

2. 두 배열의 교차점

주제 설명

여기에 이미지 설명 삽입

문제 해결 아이디어

이 질문은 해시 테이블을 사용합니다. 첫 번째 주기는 첫 번째 배열에서 각 숫자의 발생 횟수를 세고 두 번째 주기는 각 숫자가 해시 테이블에 나타나는지 여부를 결정합니다. 나타나면 이 숫자를 최종 결과에 넣습니다. array , 최종 결과는 중복 제거가 필요하다는 점에 유의해야 합니다.

var intersection = function(nums1, nums2) {
  let set = new Set(nums1)
    let res = []
    for(let i = 0;i<nums2.length;i++){
        if(set.has(nums2[i])){
            res.push(nums2[i])
        }
    }
    return [...new Set(res)]
};

3. 해피넘버

주제 설명

여기에 이미지 설명 삽입

문제 해결 아이디어

이 질문의 난이도는 각 숫자의 제곱의 합을 구하는 것이고 나머지는 합이 해시 테이블에 나타났는지 판단하는 것입니다. false를 반환하고 합계가 1이면 true를 반환합니다.

var isHappy = function(n) {
  let set = new Set() // 本题只需要存值即可 所以使用Set数据集
  while(1) {
      let sum = getSum(n)
      if(set.has(sum)) {
          return false
      } else if(sum == 1) {
          return true
      } else {
          set.add(sum)
      }
      n = sum
  }
};
var getSum = function(n) {
    let sum = 0;
    while(n) {
        sum += (n%10)**2 // n % 2 求末位数
        n = Math.floor(n/10); // n/10 整除
    }
    return sum
}

4. 두 숫자의 합

주제 설명

여기에 이미지 설명 삽입

문제 해결 아이디어

이 질문에서 해시 테이블을 사용하는 것은 비교적 간단합니다.이 요소가 나타났는지 여부를 판별하기 위해 요소를 제공해야 합니다.있는 경우 이 요소의 첨자를 반환합니다.
그런 다음 요소가 나타나는지 여부를 결정하기 위해 이 요소를 키로 사용하므로 배열의 요소를 키로 사용하고 키는 값에 해당하며 값은 첨자를 저장하는 데 사용됩니다.

var twoSum = function(nums, target) {
  let map = new Map()
  for(let i = 0;i<nums.length;i++){
      if(map.has(target -nums[i])) {
          return [i,map.get(target-nums[i])]
      } else {
          map.set(nums[i],i)
      }
  }
};

추천

출처blog.csdn.net/Salange1/article/details/128294604