题解 | #动物牛的数学问题#
动物牛的数学问题
https://www.nowcoder.com/practice/a732430a93914e3a96a200a45e3a150e
双指针,唯一注意的点是需要对idxs进行排序而不是对数组本体排序。
#include <cstddef>
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型vector
*/
bool cmp(int a, int b, vector<int> nums){
return nums[a] < nums[b];
}
vector<int> twoSum(vector<int>& nums, int target) {
// write code here
int n = nums.size();
vector<int> idxs(n);
for(int i=0;i<n;i++){
idxs[i] = i;
}
sort(idxs.begin(), idxs.end(), [&nums](size_t t1, size_t t2){return nums[t1]<nums[t2];});
// sort(nums.begin(), nums.end());
int left = 0, right = nums.size()-1;
while(left<right){
if(target==nums[idxs[left]]+nums[idxs[right]]){
if(idxs[left] < idxs[right]) return {idxs[left], idxs[right]};
else return {idxs[right], idxs[left]};
}
else if(target<nums[left]+nums[right]){
right--;
}
else if(target>nums[left]+nums[right]){
left++;
}
}
return {};
}
};
阿里云工作强度 702人发布