力扣 1. 两数之和

题目描述

力扣题目链接

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,但是数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]

示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

题解

Python

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( n ) O(n) O(n)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        records = dict() # key对应nums中的数据 value对应该值的索引
        for index, value in enumerate(nums): # 通过枚举类型可以更方便地获取下标
            if target - value in records: # 可在字典中找到另一个值
                return [index, records[target - value]]
            else: # 没有对应的另一个值 将当前值及其索引加入字典
                records[value] = index


C

时间复杂度 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    
    
    int *ans = (int *) calloc(2, sizeof(int)); //store these two numbers

    *returnSize = 2;

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


C++

时间复杂度 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n),空间复杂度 O ( n ) O(n) O(n)

class Solution {
    
    
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    
    
        map<int, int> records; // key对应nums中的数据 value对应该值的索引

        for (int i = 0; i < nums.size(); ++i) {
    
    
            auto iter = records.find(target - nums[i]);
            if (iter != records.end()) {
    
     // 可在map中找到另一个值
                return {
    
    i, iter->second};
            } else {
    
    
                records.emplace(nums[i], i); // 没有对应的另一个值 将当前值及其索引加入map
            }
        }
        return {
    
    };
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43686863/article/details/124623266