1.Two Sum

Posted 二十年后20

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.Two Sum相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode.com/problems/two-sum/description/

题目大意:输入一个数组和一个整数,输出数组中两个数字之和是这个整数的这两个数字的下标,不能使用两次同一个数字。

测试用例:输入{2, 7, 11, 19}  9  输出 [0, 1]

    输入{3, 3}  6 输出[0, 1]

    输入{3, 2, 4}  6  输出[1, 2]

解决办法一:两个for循环,依次遍历,时间复杂度是o(n^2),空间复杂度是o(1)

技术分享
    public int[] twoSum(int[] nums, int target) {
        int[] ans = new int[2];
        boolean mark = false;
        for(int i = 0; i < nums.length; i++) {
            for(int j = i + 1; j < nums.length; j++) {
                if(nums[i] + nums[j] == target) {
                    ans[0] = i;
                    ans[1] = j;
                    mark = true;
                    break;
                }
            }
            if(mark == true) {
                break;
            }
        }
        return ans;
        }    
View Code

解决办法二:先对原数组进行排序,然后两个标记分别从数组左边和右边进行遍历,如果两数之和大于target,则右标记--;如果两数之和小于target,则左标记++;否则找到该两数。时间复杂度o(nlogn),空间复杂度o(n)

技术分享
 1     public int[] twoSum(int[] nums, int target) {
 2         int length = nums.length;
 3         int[] tmp = new int[length];
 4         System.arraycopy(nums, 0, tmp, 0, length);
 5         Arrays.sort(nums);
 6         int[] answers = new int[2];
 7         answers[0] = answers[1] = -1;
 8         for(int i = 0, j = length - 1; i < length && j > i; ) {
 9             if(nums[i] + nums[j] < target) {
10                 i++;
11             }
12             else if(nums[i] + nums[j] > target) {
13                 j--;
14             }
15             else {
16                 for(int t = 0; t < length; t++) {
17                     if(tmp[t] == nums[i] && answers[0] == -1) {
18                         answers[0] = t;
19                     }
20                     else if(tmp[t] == nums[j]) {
21                         answers[1] = t;
22                     }
23                 }
24                 break;
25             }
26         }
27         return answers;
28     }
View Code

 

以上是关于1.Two Sum的主要内容,如果未能解决你的问题,请参考以下文章

1. Two Sum

1. Two Sum

1. Two Sum

[LeetCode] 1 Two Sum

[LeetCode] 1 Two Sum

1.Two Sum