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

力扣Hot100(Java版本)

1. 哈希

1.1 两数之和

题目描述:

  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

  • 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

  • 你可以按任意顺序返回答案。

力扣链接:

https://leetcode.cn/problems/two-sum/description/【简单】

解题思路:

  1. 实例化一个HashMap来保存<值, 索引>

  2. 遍历HashMap,找到就返回索引下标,找不到就添加元素

核心代码:

class Solution {public int[] twoSum(int[] nums, int target) {// map保存<值,索引>Map<Integer,Integer> map = new HashMap<>();for(int i = 0; i < nums.length; ++i){if(map.containsKey(target - nums[i])){return new int[]{map.get(target - nums[i]),i};}map.put(nums[i],i); // 返回[索引1,索引2]}return new int[0]; // 返回[]}
}

1.2 字母异位词分组

题目描述:

  • 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

  • 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

力扣链接:

https://leetcode.cn/problems/group-anagrams/description【中等】

解题思路:

  1. Map保存<排序后的字符串, List<String>>
  2. 遍历strs, 依次添加到Map

核心代码:

class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 1. Map保存<排序后的str, List<String>>Map<String, List<String>> map = new HashMap<>();// 2. 遍历strs, 依次添加到Mapfor (String str : strs){char[] charStr = str.toCharArray();Arrays.sort(charStr);String orderStr = new String(charStr);if (map.containsKey(orderStr)){map.get(orderStr).add(str);}else{List<String> temp = new ArrayList<>();temp.add(str);map.put(orderStr,temp);}}return new ArrayList<List<String>>(map.values());}
}

1.3 最长连续序列

题目描述:

  • 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

  • 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

力扣链接:

https://leetcode.cn/problems/longest-consecutive-sequence/description【中等】

解决思路:

  1. 将nums数组的所有元素放入HashSet,去除重复元素
  2. 从序列的最小值开始找,更新最大值

核心代码:

class Solution {public int longestConsecutive(int[] nums) {// 1. 将nums数组的所有元素放入HashSet, 去除重复元素HashSet<Integer> hs = new HashSet<>();for (int i : nums){hs.add(i);}int ans = 0;for (int i : hs){// 2. 只从序列的最小值开始找if (!hs.contains(i - 1)){int curAns = 1;while(hs.contains(i+1)){i++;curAns++;}ans = Math.max(ans,curAns);}}return ans; }
}

2. 双指针

http://www.xdnf.cn/news/6007.html

相关文章:

  • 如何学习VBA_3.3.3 VBA程序写好后,如何进行调试,直到程序运行
  • 力扣-543.二叉树的直径
  • 每周靶点分享:Nectin-4、CDH6及文献分享
  • 网络协议分析 实验四 ICMPv4与ICMPv6
  • 紫光同创FPGA实现AD7606数据采集转UDP网络传输,提供PDS工程源码和技术支持和QT上位机
  • 根据输入的数据渲染柱形图
  • 分布式异步强化学习框架训练32B大模型:INTELLECT-2
  • React Native 与 Expo
  • 迅龙3号基于兆讯MH22D3适配CST328多点触摸驱动开发笔记
  • 分别在windows和linux上使用curl,有啥区别?
  • INT202 Complexity of Algroithms 算法的复杂度 Pt.7 NP-Completeness NP完全性
  • JuiceFS v1.3-beta1:新增 Python SDK,特定场景性能 3 倍于 FUSE
  • XA协议和Tcc
  • Vue3+Vite单页面应用(SPA)改造为多页面应用(MPA)
  • 内存泄漏与OOM崩溃根治方案:JVM与原生内存池差异化排查手册
  • 2025.05.11拼多多机考真题算法岗-第三题
  • 当java进程内存使用超过jvm设置大小会发生什么?
  • 数据库原理实验:视图与索引
  • 游戏引擎学习第276天:调整身体动画
  • 【计算机网络】3数据链路层②
  • STM32 __main汇编分析
  • 基于 mathematical-expression 的动态数学方程求解器实现
  • 如何使用C51的Timer0实现定时功能
  • DeepBook 与 CEX 的不同
  • HDFS的客户端操作(2)文件上传
  • 重庆医科大学附属第二医院外科楼外挡墙自动化监测
  • 鸿蒙5.0项目开发——鸿蒙天气项目的实现(介绍)
  • OJ判题系统第6期之判题逻辑开发——设计思路、实现步骤、代码实现(策略模式)
  • 目标检测任务 - 数据增强
  • Linux文件编程——标准库函数(fopen等)和系统调用函数(open等)的区别