【LeetCode编程学习(C语言)】1.Two Sum
来源:互联网 发布:超级基因优化器小说 编辑:程序博客网 时间:2024/05/21 10:56
题目:给定一个整型数组,返回两个数的下标,满足两个数相加为一个特定整数。假定只有一个正确答案
例如:
nums = [2, 7, 11, 15], target = 9,因为nums[0] + nums[1] = 2 + 7 = 9,返回[0,1]
链接:Two Sum
解法:
1.穷举
最常规的解法,两个数相加,穷举所有数进行对比,总能得到正确答案。时间复杂度O(n^n)。
int* twoSum(int* nums, int numsSize, int target) { int *a = (int*)malloc(2*sizeof(int)); for(int i = 0;i<numsSize;i++) { for(int j = i+1;(j<numsSize && j != i);j++) { if(nums[i] + nums[j] == target) { a[0] = i; a[1] = j; } } } return a;}LeetCode运行时间:292ms
2.Hash法
原理是先取一段len长度的hash表,len为数组中最小的数min和符合条件的最大数max(由目标数减去最小数确定)之差。将满足条件的数组元素放入Hash表中,通过hash表中target-nums[i]-min来确定是否已经找到满足条件的下标,使用Hash法可以把时间复杂度降低到O(n),不过在数组内值差别很大时不太适合此方法。例如数组有两个元素[-1000,1000],,分配空间就太大,效率不高。
int* twoSum(int* nums, int numsSize, int target) { int min = 2147483647; int i = 0; for (i = 0; i < numsSize; i++) { if (nums[i] < min) min = nums[i]; } int max = target - min; int len = max - min + 1; //确定hash长度 int *table = (int*)malloc(len*sizeof(int)); int *indice = (int*)malloc(2*sizeof(int)); for (i = 0; i < len; i++) { table[i] = -1; //hash初值 } for (i = 0; i < numsSize; i++) { if (nums[i]-min < len) { if (table[target-nums[i]-min] != -1) { //满足相加为target indice[0] = table[target-nums[i] - min]; indice[1] = i; return indice; } table[nums[i]-min] = i; } } free(table); return indice;}LeetCode运行时间:0ms
测试主函数
因为懒得写printf,所以使用了cout
#include<iostream>using namespace std;int main(){int a[10];int b[2];int *p = b;int numsize,targrt;cout<<"Input array count:";cin>>numsize;cout<<"Input target value:";cin>>targrt;cout<<"Input array value:";for(int i=0;i<numsize;i++)cin>>a[i];p = twoSum(a,numsize,targrt);cout<<*p<<" "<<*(p+1)<<endl;}
0 0
- 【LeetCode编程学习(C语言)】1.Two Sum
- LeetCode 1. Two Sum(c语言实现)
- leetcode 1. Two Sum (C语言)12
- LeetCode::Two Sum C语言
- LeetCode::Two Sum C语言
- Leetcode c语言-Two Sum
- 【LeetCode编程学习(C语言)】2.Add Two Numbers
- 【leetcode】1. Two Sum(Python & C++)
- 【LeetCode算法练习(C语言)】Two Sum
- leetcode 1:two sum(C语言)
- [C语言][LeetCode][1]Two Sum
- 1---LeetCode【Two Sum】|C语言|总结
- LeetCode-1-Two Sum(C语言实现)
- LeetCode 1. Two Sum (C++)
- leetcode学习 1.two sum
- LeetCode:1. Two Sum解法(C,C++,Jave,Python)
- leetcode编程题(1)Two Sum
- 1. Two Sum(leetcode)
- STM8/32使用外部有源晶振的问题
- js 基础概念
- Android自定义View的实现方法
- Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(2)
- NSData 与 NSString转换
- 【LeetCode编程学习(C语言)】1.Two Sum
- leetcode Add Digits 之C++实现
- Android —View的事件分发机制
- Machine Learning - Andrew Ng on Coursera (Week 2)
- 设置linux 服务器不再响应ping
- Android自定义View的实现方法,带你一步步深入了解View(四)
- 小番茄破解
- batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)
- Machine Learning - Andrew Ng on Coursera (Week 3)