【题目描述】
给定一个整数数组 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]
能通过,但是耗时时间长。