LeetCode - 0001 -Two Sum

题目概要

在序列中找到和为特定值的两个元素的索引。

原题链接

LeetCode - Two Sum

解题思路

  1. 先将之排序
  2. 在排序之后的列表中查找符合条件的两个数
  3. 在原列表中找到这两个数的下标

复杂度分析

时间复杂度:$O(n)$
空间复杂度:$O(n)$

代码

class Solution {
public:
    vector<int> twoSum(vector<int>& num, int target) {
        // 1. 排序
        std::vector<int> sorted = std::vector<int>(nums);
        std::sort(sorted.begin(), sorted.end());
        // 2. 查值
        unsigned low = 0, high = sorted.size() - 1;
        while (low < high) {
            while (low < high && sorted[low] + sorted[high] < target) ++low;
            while (low < high && sorted[low] + sorted[high] > target) --high;
            if (sorted[low] + sorted[high] == target) break;
        }
        // 3. 查索引
        std::vector<int> rvec;
        int minIndex = -1, maxIndex = -1, sz = nums.size();
        for (int i=0;i != sz;++i) {
            if (minIndex == -1 && nums[i] == sorted[low]) minIndex = i;
            else if (maxIndex == -1 && nums[i] == sorted[high]) maxIndex = i;
        }
        // 4. 给出答案
        rvec.push_back(minIndex);
        rvec.push_back(maxIndex);
        return rvec;
    }
};

广告区域

本人和小伙伴们承接各种软件项目,有需求的可以联系我们。
QQ: 2992073083

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,774评论 0 33
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,375评论 0 1
  • 中午,在一家卖场的六九豆浆吃饭。这家店的饭店集合了旁边商场的工作人员,周边小区的老人孩子,和一小部分逛商场的顾客。...
    奚泠阅读 196评论 0 0
  • 夕阳西下 飞花满桠 几趋温暖如春 奈何倥偬天涯 秋水长天 落霞孤鹜 旷享苍茫远黛 谁料飘零无处 我一心远方 远方却...
    烟雨心清阅读 312评论 9 6
  • 这几天,刷屏朋友圈的该是一支女生欢喜男生厌恶的口红吧。一场成功营销的背后,是一场有关口红与爱情的口水战,之后,更是...
    梦槿馨阅读 1,358评论 0 0