代码随想录算法训练营Day06 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

66 阅读1分钟

LeetCode题目

242.有效的字母异位词

题目链接:Valid Anagram - LeetCode

代码如下:

func isAnagram(s string, t string) bool {
	record := [26]int{}
	for _, c := range s {
		record[c-int32('a')]++
	}
	for _, c := range t {
		record[c-int32('a')]--
	}
	return record == [26]int{}
}

349.两个数组的交集

题目链接:Intersection of Two Arrays - LeetCode

代码如下:

func intersection(nums1 []int, nums2 []int) []int {
	set := make(map[int]int, 0)
	result := make([]int, 0)
	for _, i := range nums1 {
		if _, ok := set[i]; !ok {
			set[i] = 0
		}
	}
	for _, i := range nums2 {
		if _, ok := set[i]; ok {
			result = append(result, i)
			delete(set, i)
		}
	}
	return result
}

202.快乐数

题目链接:Happy Number - LeetCode

代码如下:

func getSum(n int) int {
	sum := 0
	for n > 0 {
		sum += (n % 10) * (n % 10)
		n = n / 10
	}
	return sum
}

func isHappy(n int) bool {
	set := make(map[int]bool)
	for n != 1 && !set[n] {
		set[n] = true
		n = getSum(n)
	}
	return n == 1
}

1.两数之和

题目链接:Two Sum - LeetCode

代码如下:

func twoSum(nums []int, target int) []int {
	set := make(map[int]int, 0)
	for index, val := range nums {
		if elem, ok := set[target-val]; ok {
			return []int{elem, index}
		} else {
			set[val] = index
		}
	}
	return []int{}
}

总结

  1. 哈希表、哈希函数、哈希碰撞
  2. 一般哈希碰撞有两种解决方法,拉链法和线性探测法
  3. 常见的三种哈希结构,数组、set(集合)、map(映射)
  4. 当遇到要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法
  5. 哈希法牺牲空间换取时间