当前位置: 首页 > article >正文

LeetCode Hot100(持续更新中)

一、哈希

(一)两数之和

思路一:传统方法-双层循环遍历
时间复杂度:O(n^2)

空间复杂度:O(1)

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)

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)

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());
    }
}


http://www.kler.cn/a/544248.html

相关文章:

  • 网络安全 | SNI介绍及F5中的配置应用
  • 热更图片方案
  • Zabbix-监控SSL证书有效期
  • react 18父子组件通信
  • 为什么mysql默认RR(repeat read可重复读)隔离级别
  • 【数据结构入门】一、数组
  • python实现比对两个json串的方法
  • 二、交换机的vlan子设备接入
  • 爬虫逆向学习(十六):某方数据protobuf协议逆向解析
  • untiy3D为游戏物体制作简单的动画
  • 提示词生成新方法,用Make自动化生成
  • MongoDB基础入门
  • Maven Profile 配置:支持不同环境的构建
  • 回环地址127.0.0.1跟自身IP有什么区别?
  • 简述MySQL主从复制原理及其工作过程,配置一主两从并验证
  • 订单自动关闭方案设计
  • 如何在Linux中设置定时任务(cron)
  • 使用 React 16+Webpack 和 pdfjs-dist 或 react-pdf 实现 PDF 文件显示、定位和高亮
  • 【C#零基础从入门到精通】(十一)——C#Reandom随机类详解
  • 1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)
  • 2、k8s 二进制安装(详细)
  • 《qt open3d中添加随机点采样》
  • ubuntu部署snmp
  • 深入解析:如何利用期货Level2高频Tick数据洞察市场动态
  • 变形的宽搜 育才官网 HN036 涂色游戏
  • Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行