马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目来自于力扣,内容目的-更多的是自己学习的记载
1. 两数之和
给定一个整数数组 nums 和一个整数量标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能利用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:由于 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
- 2 <= nums.length <= 10(4)
- -10(9) <= nums <= 10(9)
- -10(9) <= target <= 10(9)
- 只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n(2)) 的算法吗?
个人解法
思路:双层循环,找到符合条件的情况O(n(2))
- class Solution {
- public int[] twoSum(int[] nums, int target) {
- for(int i=0;i<nums.length;i++){
- for(int j=i+1;j<nums.length;j++){
- if(nums[i]+nums[j]==target ){
- int [] a={i,j};
- return a;
- }
- }
- }
- return new int[0];
- }
- }
复制代码
进阶解法
官方题解1. 两数之和 - 力扣(LeetCode)
- class Solution {
- public int[] twoSum(int[] nums, int target) {
- int n = nums.length;
- HashMap<Integer, Integer> hashtable = new HashMap<>();
- for (int i = 0; i < n; i++) {
- if(hashtable.containsKey(target - nums[i]))//别漏了s,别忘记大写K,别忘记num+s
- {
- return new int[]{hashtable.get(target - nums[i]), i};
- }
- hashtable.put(nums[i], i);
- //先判断有是否满足条件,再存储,减少开销
- //以{键,值}存储
- }
- return new int[0];
- }
- }
复制代码
学习:
HashMap 是 Java 中一个非经常用的集合类,它用于存储键值对,并允许通过键快速查找对应的值。它黑白同步的,因此在多线程环境下大概需要额外的同步处置处罚。
下面是 HashMap 中一些常用的函数,并附带了示例代码:
1. put(K key, V value)
- 功能:将指定的键值对插入到哈希表中。如果该键已经存在,则更新其对应的值。
- 时间复杂度:平均为 O(1),最坏情况下为 O(n)(当哈希表出现严厉冲突时)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- System.out.println(map); // 输出: {apple=10, banana=20}
复制代码
2. get(Object key)
- 功能:返回指定键对应的值。如果键不存在,返回 null。
- 时间复杂度:平均为 O(1),最坏情况下为 O(n)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- System.out.println(map.get("apple")); // 输出: 10
- System.out.println(map.get("orange")); // 输出: null
复制代码
3. containsKey(Object key)
- 功能:检查哈希表中是否包含指定的键。
- 时间复杂度:平均为 O(1),最坏情况下为 O(n)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- System.out.println(map.containsKey("apple")); // 输出: true
- System.out.println(map.containsKey("orange")); // 输出: false
复制代码
4. containsValue(Object value)
- 功能:检查哈希表中是否包含指定的值。
- 时间复杂度:O(n),由于需要遍历哈希表中的全部值。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- System.out.println(map.containsValue(10)); // 输出: true
- System.out.println(map.containsValue(30)); // 输出: false
复制代码 5. remove(Object key)
- 功能:删除哈希表中指定的键及其对应的值。如果该键不存在,什么都不做。
- 时间复杂度:平均为 O(1),最坏情况下为 O(n)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- map.remove("apple");
- System.out.println(map); // 输出: {banana=20}
复制代码
6. size()
- 功能:返回哈希表中键值对的数量。
- 时间复杂度:O(1)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- System.out.println(map.size()); // 输出: 2
复制代码
7. isEmpty()
- 功能:检查哈希表是否为空(即没有任何键值对)。
- 时间复杂度:O(1)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- System.out.println(map.isEmpty()); // 输出: true
- map.put("apple", 10);
- System.out.println(map.isEmpty()); // 输出: false
复制代码 8. clear()
- 功能:清空哈希表中的全部键值对。
- 时间复杂度:O(n),需要遍历全部元素。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- map.clear();
- System.out.println(map); // 输出: {}
复制代码
9. keySet()
- 功能:返回哈希表中全部键的集合(Set<K>)。
- 时间复杂度:O(n),由于需要遍历哈希表中的全部键。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- Set<String> keys = map.keySet();
- System.out.println(keys); // 输出: [apple, banana]
复制代码
10. values()
- 功能:返回哈希表中全部值的集合(Collection<V>)。
- 时间复杂度:O(n),由于需要遍历哈希表中的全部值。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- Collection<Integer> values = map.values();
- System.out.println(values); // 输出: [10, 20]
复制代码
11. entrySet()
- 功能:返回哈希表中全部键值对的集合(Set<Map.Entry<K, V>>),此中每个元素是一个 Map.Entry 对象,包含一个键和一个值。
- 时间复杂度:O(n),由于需要遍历哈希表中的全部键值对。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.put("banana", 20);
- Set<Map.Entry<String, Integer>> entries = map.entrySet();
- for (Map.Entry<String, Integer> entry : entries) {
- System.out.println(entry.getKey() + " = "entry.getValue());
- }
- // 输出:// apple = 10// banana = 20
复制代码
12. putIfAbsent(K key, V value)
- 功能:如果哈希表中不包含指定的键,则插入该键值对。如果键已存在,则不做任何操纵。
- 时间复杂度:O(1)(平均情况)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.putIfAbsent("banana", 20); // 插入 "banana" = 20
- map.putIfAbsent("apple", 30); // "apple" 已经存在,值不会更新
- System.out.println(map); // 输出: {apple=10, banana=20}
复制代码
13. replace(K key, V value)
- 功能:如果哈希表中包含指定的键,则用新值更换其对应的旧值。如果键不存在,则不做任何操纵。
- 时间复杂度:O(1)(平均情况)。
示例:
- HashMap<String, Integer> map = new HashMap<>();
- map.put("apple", 10);
- map.replace("apple", 15); // 更新 "apple" 的值为 15
- System.out.println(map); // 输出: {apple=15}
复制代码
总结
HashMap 提供了很多方法来处置处罚键值对的操纵,包括添加、查找、删除、更新、检查等。这些方法通常具有 O(1) 的时间复杂度,允许高效地进行查找和插入操纵。
- 常用方法:
- put(), get(), containsKey(), remove(), size(), clear()
- keySet(), values(), entrySet()
- putIfAbsent(), replace()
HashMap 黑白常强大的数据布局,适用于需要频繁查找、更新和插入数据的场景。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |