ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode0001-两数之和等于目标值

2021-06-29 22:34:38  阅读:99  来源: 互联网

标签:aa target LeetCode0001 int 数组 目标值 new 两数 HashMap


//给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
//
//你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
//
//你可以按任意顺序返回答案。
//
//来源:力扣(LeetCode)
//链接:https://leetcode-cn.com/problems/two-sum


给定⼀个数组和⼀个⽬标和,从数组中找两个数字相加等于⽬标和,输出这两个数字的下标。学习笔记一:
import java.util.HashMap;
import java.util.Map;

public class Num001 {

//   给定⼀个数组和⼀个⽬标和,从数组中找两个数字相加等于⽬标和,输出这两个数字的下标。
   public  static int[] returnIndex(int[] nums1,int target){
       int result[] = new int[2];
       for(int i =0;i<nums1.length;i++){
           for(int j=i+1;j<nums1.length;j++){
               if(nums1[i]+nums1[j]==target){
                   result[0]=i;
                   result[1]=j;
                   return result;
               }
           }
       }
         return result;
   }

    public  static int[] returnIndex2(int[] nums1,int target){
       int[] result= new int[2];
        HashMap<Integer,Integer> maping = new HashMap<>();
       for (int i=0;i<nums1.length;i++){
//          先put会有问题: 重复元素put时,map中记录的永远是当前元素的 value,即:last 永远 ==i
           maping.put(nums1[i],i);
//           则  lat 永远 == i
           int last =maping.get(target-nums1[i]);
           if(maping.containsKey(target-nums1[i]) && last!=i){
               result[0] = i;
               result[1] = last;
               return result;
           }
       }
       return  result;
    }

    public  static int[] returnIndex3(int[] nums1,int target){
        int[] result= new int[2];
        HashMap<Integer,Integer> maping = new HashMap<>();
        for (int i=0;i<nums1.length;i++){
//          先put会有问题: 重复元素put时,map中记录的永远是当前元素的 value,即:last 永远 ==i
//            int last =maping.get(target-nums1[i]); //这样会报错空指针,因为首次maping还没有值,直接get就会空指针
//            maping.put(nums1[i],i);
//           则  lat 永远 == i
            if(maping.containsKey(target-nums1[i])){
                result[0] = i;
                result[1] = maping.get(target-nums1[i]);
                return result;
            }
            maping.put(nums1[i],i);
        }
        return  result;
    }

    public static int[] twoSum(int[] nums, int target){

        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++){
//            如果数组中有多个相同的数,则map记录的value将是最后一次出现的位置,如{3,3,3,3},map对应的是<3,3>
            map.put(nums[i],i);
        }
        for(int i=0;i<nums.length;i++) {
            int sub = target - nums[i];
            if (map.containsKey(sub) && map.get(sub) != i) {
                return new int[]{i, map.get(sub)};
            }
        }
        throw new IllegalArgumentException("No two sum solution");
   }


    public static void main(String[] args) {
       int[] a = {3,3,3,3};
//       int[] result = twoSum(a, 6);
 int [] result = returnIndex3(a,6);
       System.out.println(result);

    }

}

 学习笔记二:

import java.util.HashMap;

public class Num001_1 {
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
        for(int i=0;i<nums.length;i++){
//            if(nums[i]>target){
//                i++;
//            } 这里不对,因为不一定都是正数,直接去掉就可以
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    result[0]=i;
                    result[1]=j;
                }
            }
        }
        return result;
    }

    public int[] twoSum1(int[] nums, int target) {

        HashMap<Integer,Integer> aa = new HashMap<>();

        for(int i = 0 ;i < nums.length; i++){
            aa.put(nums[i],i); }
        for(Integer j: aa.keySet()){
            if(aa.containsKey(target-j))
                return new int[]{aa.get(j),aa.get(target-j)};
        }

        return new int[0];

    }
}

 

标签:aa,target,LeetCode0001,int,数组,目标值,new,两数,HashMap
来源: https://www.cnblogs.com/ccCtnLearn/p/14952295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有