力扣简单1道_两数之和

  1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

之前做过这道题,看到这道题我的脑海里出现三个粗略的想法。1暴力枚举法、2二分算法、3hashmap

我首先排除了暴力枚举 ,实现思路是:target-nums[i],一个一个找数组中是否有相等的,若有,将i、j返回出去
二分算法 ,实现思路是,用Arrays.sort将数组进行排序,将target-nums[i]设为目标值,然后两个指针,第一个指针指向i+1位置,最后一个指针指向末尾,二分查找
hashmap ,我先将数组中的下标和对应的值存进hashmap里,循环遍历次数为nums.length,在循环里先得到key->i,value->get(i);然后remove(i),调用containsValue(target-get(i)),false返回new int[0],并且将remove的元素添加回去;这里有个小问题,如果是true,那么怎么得到true的这个value的key呢?假设我们得到了,返回new int[]{i,key}
很显然,我们得不到这个key,那么反过来想呢?将hashmap的key和value反过来存储,这里又有一个问题,hashmap的key唯一,但显然nums数组里面可能会存在两个相同的元素,所以hashmap显然不行。

我们知道map的key必须唯一不可重复,所以说这个思路走不通。

既然把元素存进去然后查找是否存在某个value行不通(我们不知道对应的key),换个思路,我们可以寻找某个key是否存在,key存nums[i],value存i,那么如果存在,可以返回 new int[]{i,value}

实现代码:

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(target-nums[i])){
                return new int[]{i,map.get(target-nums[i])};
            }else{
                map.put(nums[i],i);
            }
        }
        return new int[0];
    }
}


我们看这个map的结构图,可以知道key-value形式的除了hashmap还有linkedhashmap、treemap、concurrenthashmap以及hashtable

hashmap:key、value都可为null,但key不可重复,value可重复,线程不安全,无序

linkedhashmap:key、value都可为null,key不可重复,value可重复,线程不安全,有序(按照输入顺序输出)

treemap:key不可为null,value可以为null,若key可以排序,那么按照自然顺序排序,升序

concurrenthashmap:key、value都不能为null,线程安全,

hashtable:key、value都不能为null,线程安全

以下是我二月份的时候对这道题的思考,看来还是有点成长的。
添加链接描述

相关推荐
带刺的坐椅12 小时前
AI 应用工作流:LangGraph 和 Solon AI Flow,我该选谁?
java·python·ai·solon·flow·langgraph
北郭guo12 小时前
MyBatis框架讲解,工作原理、核心内容、如何实现【从浅入深】让你看完这篇文档对于MyBatis的理解更加深入
java·数据库·mybatis
庄宿正12 小时前
【Vue2+SpringBoot+SM2】Vue2 + Spring Boot 实现 SM2 双向非对称加密完整实战
java·spring boot·后端
Predestination王瀞潞12 小时前
Java EE开发技术(第七章:JSTL标签库)
java·java-ee
信仰_27399324312 小时前
Java面试题
java·开发语言
CoovallyAIHub12 小时前
超越YOLOv8/v11!自研RKM-YOLO为输电线路巡检精度、速度双提升
深度学习·算法·计算机视觉
哭泣方源炼蛊12 小时前
HAUE 新生周赛(七)题解
数据结构·c++·算法
q***649712 小时前
SpringMVC 请求参数接收
前端·javascript·算法
Lwcah12 小时前
Python | LGBM+SHAP可解释性分析回归预测及可视化算法
python·算法·回归
小此方12 小时前
从零开始手搓堆:核心操作实现 + 堆排序 + TopK 算法+ 向上调整 vs 向下调整建堆的时间复杂度严密证明!
开发语言·数据结构·算法