IT评测·应用市场-qidao123.com

标题: 【leetcode 16】1. 两数之和 [打印本页]

作者: 熊熊出没    时间: 2025-1-16 19:41
标题: 【leetcode 16】1. 两数之和
原题链接
   方法一:两层for循环方法
  1. class Solution {
  2.     public int[] twoSum(int[] nums, int target) {
  3.         int len=nums.length;
  4.         
  5.         int[] res=new int[2];
  6.         for(int i=0;i<len;i++){
  7.             for(int j=i+1;j<len;j++){
  8.                 if(nums[i]+nums[j]==target){
  9.                     res[0]=i;
  10.                     res[1]=j;
  11.                 }
  12.             }
  13.         }
  14.         return res;
  15.     }
  16. }
复制代码
  什么时间使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在聚集里的时间,就要第一时间想到哈希法。
本题需要一个聚集来存放我们遍历过的元素,然后在遍历数组的时间去询问这个聚集,某元素是否遍历过,也就是 是否出如今这个聚集。
那么我们就应该想到使用哈希法了。
因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。
    方法二:使用哈希表
  1. class Solution {
  2.     public int[] twoSum(int[] nums, int target) {
  3.         int[] res=new int[2];
  4.         if(nums==null||nums.length==0){
  5.             return res;
  6.         }
  7.         Map<Integer,Integer>map=new HashMap<>();
  8.         for(int i=0;i<nums.length;i++){
  9.             int tmp=target-nums[i];
  10.             if(map.containsKey(tmp)){
  11.                 res[0]=i;
  12.                 res[1]=map.get(tmp);
  13.                 break;
  14.             }
  15.             map.put(nums[i],i);
  16.         }
  17.         return res;
  18.     }
  19. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4