Leetcode 1. 两数之和 (简单)

【题目描述】

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

【示例】

给定 nums = [2, 7, 11, 15], target = 9

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

【我的答案】
C
直接暴力枚举,俩循环直接上

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

1.刚开始审题不认真,以为是像三数之和那样,将数从小到大排序了。
2.在result的返回值返回了nums[i]和nums[j]。
3.*returnSize = 2 ;是因为函数参数最后需要返回个值

result=(int*)malloc(sizeof(int)*2);的解释如下:

注:
1.malloc是c语言中的动态分配内存,result=(int*)malloc(sizeof(int)2);malloc函数返回的是void型,所以要强制类型转换成int,在前面加上(int *),才能给整型赋值,后面(sizeof(int)*2)的意思是分配两个int大小的空间;

总结:该方法简单但是时间复杂度为O(n2),空间复杂度为O(1);运行速度慢且内存空间消耗大

作者:chenlele
链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-gpe3dbjds1/
来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

按照之前写C的方式改成python

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

能通过,但是耗时时间长。
Leetcode 1. 两数之和 (简单)_第1张图片

你可能感兴趣的:(Leetcode)