题解 | #动物牛的数学问题#
动物牛的数学问题
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 {}; } };