• 两数之和(java)


      两数之和
      问题描绘:
      给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并回来他们的数组下标。
      你可以假定每种输入只会对应一个答案。但是,数组中同一个元素不能运用两遍。
      示例:
      给定nums=[2,7,11,15],target=9
      由于nums[0]+nums[1]=2+7=9
      所以回来[0,1]
      代码:
      packagealgorithm;
      importjava.util.Arrays;
      importjava.util.HashMap;
      importjava.util.Map;
      importjava.util.Scanner;
      publicclassSolution{
      //解法1:暴力法参考// from http://zzzjtd.com.html
      publicint[]twoSum(int[]nums,inttarget){
      inti,j;
      intsum;
      //外层循环遍历每一个元素
      for(i=0;i<=nums.length;i++){
      //内层循环遍历除i以外的值
      //并判别是否存在一个值与nums[i]之和等于target
      for(j=i+1;j<=nums.length;j++){
      sum=nums[i]+nums[j];
      if(sum==target){
      returnnewint[]{i,j};
      }
      }
      }
      thrownewIllegalArgumentException(“Notwosumsolution”);
      }
      //解法2两遍哈希表
      publicint[]twoSum_1(int[]nums,inttarget){
      Mapmap=newHashMap<>();
      //第一个循环,将数据元素的值和索引存到哈希表中
      for(inti=0;i<nums.length;i++){
      map.put(nums[i],i);
      }
      //第二个循环,遍历各元素与目标值target的差值,是否存在于哈希表中
      //存在则输出该值与差值的索引值
      for(inti=0;i<nums.length;i++){
      intcomplement=target-nums[i];
      if(map.containsKey(complement)&&map.get(complement)!=i){
      returnnewint[]{i,map.get(complement)};
      }
      }
      thrownewIllegalArgumentException(“Notwosumsolution”);
      }
      //解法3一遍哈希表
      //在迭代并将元素刺进到哈希表中的同时,先校验哈希表中是否存在当时元素所对应的目标元素,如果有则直接回来
      publicint[]twoSum_2(int[]nums,inttarget){
      Mapmap=newHashMap<>();
      for(inti=0;i<nums.length;i++){
      intcomplement=target-nums[i];
      if(map.containsKey(complement)){
      returnnewint[]{i,map.get(complement)};
      }
      map.put(nums[i],i);
      }
      thrownewIllegalArgumentException(“Notwosumsolution”);
      }
      //main
      publicstaticvoidmain(String[]args){
      Solutionsolution=newSolution();
      Scannerinput=newScanner(System.in);
      System.out.println(“请输入数组长度:”);
      intn=input.nextInt();
      int[]nums=newint[n];
      for(inti=0;i<n;i++){
      System.out.println(“输入第”+i+”个数:”);
      nums[i]=input.nextInt();
      }
      System.out.println(“请输入目标值:”);
      intm=input.nextInt();
      inttarget=m;
      System.out.println(“目标值:”+target);
      System.out.println(“整数数组nums=”+Arrays.toString(nums));
      //计算一个方法执行时长,可用模板来写
      longstartTime=System.currentTimeMillis();
      //int[]twoSum=solution.twoSum(nums,target);
      //int[]twoSum_1=solution.twoSum_1(nums,target);
      int[]twoSum_2=solution.twoSum_2(nums,target);
      longendTime=System.currentTimeMillis();
      floatexcTime=(float)(endTime-startTime)/1000;
      System.out.println(“结果=”+Arrays.toString(twoSum_2)+”,执行时间=”+excTime+’s’);
      }
      }

  • 相关阅读:
    (10)C#静态方法,静态字段,静态类,匿名类
    (9)C#类
    (8)C#字符串
    (7)C#流程控制
    (6)C#方法,作用域,方法重载
    (5)C#运算符
    各个品牌主板快速开机启动
    口袋的天空
    繁忙的都市
    取水
  • 原文地址:https://www.cnblogs.com/hite/p/13093824.html
Copyright © 2020-2023  润新知