最近花了點時間瞭解了下C++,感覺與C還是有很多不同的。接下來堅持每天用C++寫五道LeetCode。fighting!
題目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
代碼:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n=nums.size();
vector<int> ans;
map<int,int> m;
for(int i=0; i<n; i++)
m[nums[i]]=i;
for(int i=0; i<n; i++){
int t=target-nums[i];
if(m.count(t)&&m[t]!=i){
ans.push_back(i);
ans.push_back(m[t]);
break;
}
}
return ans;
}
};
這個代碼10ms通過了。
下面這個是之前寫的C,就是兩重循環,比較基礎,運行了76ms。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
int i,j;
int* a=(int*)malloc(2*sizeof(int));
for(i=0;i<numsSize;i++)
{
for(j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
a[0]=i;
a[1]=j;
}
}
}
return a;
}