加油加油!
两种代码解决一下子:
目录
一、题目
二、C++代码
思路:
- 必须是一个有序数组,将这个数组当作升序数组来解决问题。
- 需要双指针移动。左指针记为a[L],右指针为a[R]
会出现三种情况:
- a[R]+a[L]=t #t指的是目标数字
- a[R]+a[L]<t,需要左指针右移动
- a[R]+a[L]>t,需要右指针左移动。
在两个指针到一定位置之后,不需要回退。
代码:
class Solution{
public:
vector<int> twoSum(vector<int>&a,int t){
int n=a.size();
//映射
vector<int> idxs;
//.vector<int>idxs 创建一个动态数组idxs
for(int i=0;i<n;i++) idxs.push_back(i);
//不能直接排序a
sort(idex.begin(),idex.end(),[a,idex](int i,int j){
return a[idxs[i]]<a[idxs[j]];
});
int l=0,r=n-1;
vector<int>ret;//定义一个容器ret
while(l<r){
int sum=a[idxs[l]]=a[idxs[r]];
if(sum==t){
ret.push_back(idxs[l]);
ret.push_back(idxs[r]);
break;
}else if(sum<t){
l++
}else{
r--
}
}
return ret;
}
}
三、python代码:
方法:
暴力破解:最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x
代码:
class Solution(object):
def twoSum(self, nums, target):
n = len(nums) # 列表总长度
for i in range(n):
for j in range(i+1, n): # i以前值省略
if nums[i] + nums[j] == target:
return [i, j]