LeetCode Hot 100 哈希【Java和Golang解法】

发布于:2025-07-03 ⋅ 阅读:(17) ⋅ 点赞:(0)

1.两数之和

1.两数之和

在这里插入图片描述

Java解法

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> record = new HashMap<>();
        for(int i = 0; i < nums.length; i++) {
            int temp = target - nums[i];
            if (record.containsKey(temp)) {
                return new int[]{record.get(temp), i};
            }
            record.put(nums[i], i);
        }
        return new int[]{};
    }
}

Golang解法

func twoSum(nums []int, target int) []int {
    record := make(map[int]int)
	for i := 0; i < len(nums); i++ {
		temp := target - nums[i]
		value, ok := record[temp]
		if ok {
			return []int{value, i}
		}
		record[nums[i]] = i
	}
	return []int{}
}

2.字母异位词分组

49.字母异位词分组

在这里插入图片描述

Java解法

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        if (strs == null || strs.length == 0) {
            return new ArrayList<>();
        }
        Map<String, List<String>> record = new HashMap<>();
        for (String str : strs) {
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String sortedStr = new String(charArray);
            if (!record.containsKey(sortedStr)) {
                record.put(sortedStr, new ArrayList<>());
            }
            record.get(sortedStr).add(str);
        }
        return new ArrayList<>(record.values());
    }
}

Golang解法

func groupAnagrams(strs []string) [][]string {
    record := make(map[string][]string)
	for _, str := range strs {
		charSlice := []rune(str)
		sort.Slice(charSlice, func(i, j int) bool {
			return charSlice[i] < charSlice[j]
		})
		sortedStr := string(charSlice)
		record[sortedStr] = append(record[sortedStr], str)
	}
	result := make([][]string, 0, len(record))
	for _, v := range record {
		result = append(result, v)
	}
	return result
}

3.最长连续序列

128.最长连续序列

在这里插入图片描述
Java解法

class Solution {
    public int longestConsecutive(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        Set<Integer> record = new HashSet<>();
        for(int num : nums) {
            record.add(num);
        }
        int result = 0;
        for(int num : record) {
            if(!record.contains(num - 1)) {
                int currentNum = num;
                int length = 1;
                while (record.contains(currentNum + 1)) {
                    currentNum++;
                    length++;
                }
                result = Math.max(result, length);
            }
        }
        return result;
    }
}

Golang解法

func longestConsecutive(nums []int) int {
    if len(nums) == 0 {
		return 0
	}
	record := make(map[int]int)
	for _, num := range nums {
		record[num] = num
	}
	result := 0
	for num, _ := range record {
		if _, ok := record[num-1]; !ok {
			currentNum := num
			length := 1
			_, isExist := record[currentNum+1]
			for isExist {
				currentNum++
				length++
				_, isExist = record[currentNum+1]
			}
			if result < length {
				result = length
			}
		}
	}
	return result
}