您的位置:首页 > 其它

LeetCode 第一题 Two Sum

2018-03-11 17:00 375 查看
题目:点击打开链接  刚开始的时候就是想着直接暴力求解,但是没过,超时了,然后在网上看了一下解法主要就是两种::        1:将数组拷贝后进行排序,用两个指针指向头和尾,用逐渐逼近的方法接近答案(类似于二分法实在想不出好的词来形容这         个想法了),头尾值相加大于目标值就尾指针向前移,如果小于就头指针向后移,找到等于答案的值过后,在原来的数组中         去找到相应的位置,注意可能两个值是相同的,在找位置的时候避免同一个值被查找两遍,最后对结果进行排序。时间复杂          度为O(nlogn)。        2:用hash表来做。点击打开链接     这个链接的博客里写得很详细。        我用的是第一种方法:
class Solution{
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> jieguo;
vector<int> zs(nums);
sort(zs.begin(), zs.end());
int jishu1 = 0,jishu2 = zs.size() -1;
int sum = zs.at(jishu1) + zs.at(jishu2);
while(jishu1 != jishu2){
if(sum == target){
break;
}
else if(sum < target){
jishu1++;
}
else if(sum > target){
jishu2--;
}
sum = zs.at(jishu1) + zs.at(jishu2);
}
int zz;
for(int i = 0; i < nums.size(); i++){
if(nums[i] == zs.at(jishu1)){
jieguo.push_back(i);
zz = i;
break;
}
}
for(int i = 0; i < nums.size(); i++){
if(nums[i] == zs.at(jishu2)){
if(i != zz){
jieguo.push_back(i);
break;
}
}
}
sort(jieguo.begin(), jieguo.end());
return jieguo;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: