leetcode题库——两数之和

题目描述:

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

方法一:暴力解决

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        vector ans;
        for(int i=0;i

执行用时:164 ms

时间复杂度:O((n-1)+(n-2)+...+1)=O(n*(n-1)/2)=O(n^2)

方法二:快速排序+二分查找

1. 使用了pair类型,pair类型用法可参见https://blog.csdn.net/sinat_35121480/article/details/54728594

2. C++自带的快排函数sort(),用法可参见https://blog.csdn.net/w_linux/article/details/76222112

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        vector ans;
        typedef vector >VP;
        VP vp;
        for(int i=0;iflag){
                    flagr=mid-1;
                }
                else
                    flagl=mid+1;
            }      
        }

    }
};

执行用时:8 ms

时间复杂度: 快速排序O(nlogn)+枚举i二分查找jO(nlogn)=O(nlogn) 

 

优化思路:

使用方法一,利用两层for循环遍历寻找,复杂度较高。而若将数组按一定方法排序后,再使用二分法查找,便可以降低时间复杂度。

你可能感兴趣的:(leetcode题库)