LeetCode Hot100(持续更新中)

一、哈希

(一)两数之和

思路一:传统方法-双层循环遍历

时间复杂度:O(n^2)

空间复杂度:O(1)

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        // 两层循环求解 时间复杂度O(N^2) 空间复杂度O(1)
        int[] goal = new int[2];

        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if ( (nums[i] + nums[j]) == target ) {
                    goal[0] = i;
                    goal[1] = j;
                    return goal;
                }
            }
        }

        throw new IllegalArgumentException("no such two nums.");
    }
}

思路二:HashMap方法-一次遍历

时间复杂度:O(n)

空间复杂度:O(n)

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        // HashMap求解 时间复杂度O(N) 空间复杂度O(N)
        Map<Integer, Integer> numsMap = new HashMap();

        numsMap.put(nums[0], 0);

        for (int i = 1; i < nums.length; i++) {
            // 计算当前值距离目标值的补数
            int complement = target - nums[i];
            // 查看当前补数是否存在numsMap中
            if (numsMap.containsKey(complement)) {
                return new int[] { numsMap.get(complement), i};
            }
            // 不存在,将当前值加入numsMap中
            numsMap.put(nums[i], i);
        }

        throw new IllegalArgumentException("未找到符合要求的两个下标");
        
    }
}

(二)字母异位词分组

思路:采用哈希+排序

时间复杂度:O(N*M log M) N为字符串数组长度,M为字符串长度

空间复杂度:O(N*M)

java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
		// 字母异位词分组
		// 时间复杂度 O(N*MlogM)  N为字符串数组长度,M为字符串长度
		// 空间复杂度 O(N*M) 
		
		// 创建一个HashMap,键存储排序后的字符串,值存储字母异位词
		Map<String, List<String>> anagramMap = new HashMap<>();
		
		// 遍历字符串数组
		for (String str : strs) {
			// 对字符串重新进行排序
			char[] chars = str.toCharArray();
			Arrays.sort(chars);
			String sortedStr = new String(chars);
			
			// 如果哈希表不存在该字符串,则添加
			if ( !anagramMap.containsKey(sortedStr) ) {
				// 哈希表新增
				anagramMap.put(sortedStr, new ArrayList<>());
			}
			// 哈希表value赋值
			anagramMap.get(sortedStr).add(str);
		}
		
		return new ArrayList<>(anagramMap.values());
    }
}
相关推荐
小仇学长3 小时前
嵌入式八股文面试题(二)C语言算法
c语言·算法·八股文
因兹菜3 小时前
[LeetCode]day21 15.三数之和
数据结构·算法·leetcode
萌の鱼4 小时前
leetcode 2466. 统计构造好字符串的方案数
数据结构·c++·算法·leetcode
Yolowuwu5 小时前
算法跟练第十一弹——二叉树
java·算法·leetcode
云边有个稻草人6 小时前
AI语言模型的技术之争:DeepSeek与ChatGPT的架构与训练揭秘
人工智能·算法·语言模型·chatgpt·deepseek
生信宝典6 小时前
机器学习算法 - 随机森林之决策树初探(1)
算法·随机森林·机器学习
计算机小白一个6 小时前
蓝桥杯 Java B 组之函数定义与递归入门
java·算法·职场和发展·蓝桥杯
iOS开发的小学生7 小时前
国密算法SM1、SM2、SM3和SM4 具体的使用和区别
算法·国密加密·sm1 sm2 sm3 sm4
阑梦清川8 小时前
蓝桥杯---颜色分类(leetcode第75题)题解
leetcode·蓝桥杯