1_两数之和

zeta186012 / 2024-08-09 / 原文

1_两数之和

【问题描述】

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。

示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解:

【算法设计思想】

此题为简单难度的题目,主要考察对于数组(顺序表)这种数据结构的操作。最为简单的办法就是我们利用“双指针”的思想,进行遍历即可,关键是内存的分配和释放问题以及C语言中数组的指针的关系!

【算法描述】

C语言:

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    for(int i = 0; i<numsSize-1; ++i){
        for(int j = i+1; j<numsSize; ++j){
            if(nums[i]+nums[j] == target)
            {
                int *res=(int*)malloc(sizeof(int)*2);
                res[0] = i;
                res[1] = j;
                *returnSize = 2;
                return res;
            }
        }
    }
    *returnSize = 0;
    return NULL;
}


Python:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i + 1 , len(nums)):
                if(nums[i]+nums[j] == target):
                      return [i,j]
        
        return None

C++:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> res = vector<int>(2);
        for (int i = 0; i < nums.size(); i++) {
            for (int j = i + 1; j < nums.size(); j++) {
                if (nums[i] + nums[j] == target) {
                    res[0] = i;
                    res[1] = j;
                    return res;
                }
            }
        }
        return res;
    }
};

Java:

class Solution {
    public int[] twoSum(int[] nums, int target) {

        int[] res = new int[2];

        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    res[0] = i;
                    res[1] = j;
                    return res;
                }
            }
        }

        return res;
    }
}