LeetCode 167 两数之和 ||

题目描述:

解法一 :双指针法

分析 :针对数组问题,最直接的方式的就是通过遍历数组来完成题目的要求,利用好已知条件 升序排列的有序数组 我们设置两个指针 i 和 j ,初始状态分别指向数组的第一个元素和最后一个元素。通过比较numbers[i] + numbers[j] 和 target的值,如果相等,则达到题目要求,直接得到下标即可(注:题中下标从1开始) 如果numbers[i] + numbers[j] > target ,因为数组有序我们应该 j-- 使numbers[j]减小,同理如果 numbers[i] + numbers[j] < target ,我们应该使 i++ 。

代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        vector<int> res;             //用于存放下标
        int i = 0;
        int j = numbers.size()-1;
        while(i<j){
            if(numbers[i] + numbers[j] == target){
                res.push_back(i+1);
                res.push_back(j+1);
                break;            //找到一组满足题意即可
            }
            if(numbers[i] + numbers[j] > target){
                j--;
            }
            if(numbers[i] + numbers[j] < target){
                i++;
            }
        }
        return res;    
    }
};

时间复杂度:O(N)  遍历一次数组

发布了54 篇原创文章 · 获赞 14 · 访问量 3610

猜你喜欢

转载自blog.csdn.net/q2511130633/article/details/103872377