前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1. 两数之和

1. 两数之和

作者头像
张伦聪zhangluncong
发布2022-10-26 17:41:02
1300
发布2022-10-26 17:41:02
举报

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

代码语言:javascript
复制
给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解1:穷举法,时间复杂度o(n^2)

代码语言:javascript
复制
   public int[] twoSum(int[] nums, int target) {
        int indices[] = new int[2];
        for(int i = 0; i < nums.length - 1; i++){
            for(int j = i+1; j < nums.length; j++){
               if((i < j) && (nums[i] + nums[j] == target)){
                   indices[0] = i;
                   indices[1] = j;
                   break;
               }
            }
        }
        return indices;
     }

解2:排序后,类似进行快速排序一次排序,时间复杂度o(2n)

代码语言:javascript
复制
 public int[] twoSum(int[] nums, int target) {
        //浅复制,拷贝副本
        int[] copynums = new int[nums.length];
        System.arraycopy(nums, 0, copynums, 0, nums.length);
        Arrays.sort(nums);
        //
        int indices[] = new int[2];
        int start = 0;
        int end = nums.length - 1;
        int a = 0;
        int b = 0;
        while (start < end) {
            int sum = nums[start] + nums[end];
            if (sum < target) {
                start++;
            } else if (sum > target) {
                end--;
            } else if (sum == target) {
                a = nums[start];
                b = nums[end];
                break;
            }
        }
        for (int i = 0; i < copynums.length; i++) {
            if (a == copynums[i]) {
                indices[0] = i;
            } else if (b == copynums[i]) {
                indices[1] = i;
            }
        }
        return indices;
    }

解3:空间换时间,时间复杂度o(n)

代码语言:javascript
复制
  public int[] twoSum(int[] nums, int target) {
        int indices[] = new int[2];
        Map<Integer,Integer> tmpMap = new HashMap();
        for(int i = 0; i < nums.length; i++){
            if(tmpMap.containsKey(nums[i])){
                indices[0]=tmpMap.get(nums[i]);
                indices[1]=i;
                break;
            }else{
                tmpMap.put(target-nums[i],i);
            }
        }
        return indices;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档