博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Two Sum
阅读量:4151 次
发布时间:2019-05-25

本文共 2834 字,大约阅读时间需要 9 分钟。

class Solution {public:	struct Node	{		int num, idx;		Node(int _num = 0, int _idx = 0):num(_num),idx(_idx){}		bool operator < (const Node& orh) const		{   			if(num == orh.num)				return idx < orh.idx;			else return num < orh.num;		}	};    vector
twoSum(vector
&numbers, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function //step 0. get an arry record the num and index of every element //step 1. sort the array and then //step 2. enumerate every element numbers[i] in the array //step 3. using binary search to find if there is an element equal to target-numbers[i] //Time complexity Analysis: O(nlgn) vector
nodes(numbers.size());//step 0 for(int i = 0; i < numbers.size(); ++i) nodes[i] = Node(numbers[i], i); sort(nodes.begin(), nodes.end());//step 1 for(int i = 0; i < nodes.size(); ++i)//step 2 { int v2 = target-nodes[i].num; //step 3 int l = min(i+1, (int)nodes.size()-1); int r = nodes.size()-1; while(l <= r) { int mid = (l+r)/2; if(nodes[mid].num > v2) r = mid-1; else if(nodes[mid].num == v2) { vector
twoSum(2); twoSum[0] = min(nodes[i].idx+1, nodes[mid].idx+1); twoSum[1] = max(nodes[i].idx+1, nodes[mid].idx+1); return twoSum; } else l = mid+1; } } }};

second time:

class Solution {public:    struct Node    {        int index;        int value;        Node(int _index = 0, int _value = 0):index(_index),value(_value){};        bool operator < (const Node& orh) const        {            return value < orh.value;        }    };    vector
twoSum(vector
&numbers, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function vector
nodes(numbers.size()); for(int i = 0; i < numbers.size(); ++i) nodes[i].index = i, nodes[i].value = numbers[i]; sort(nodes.begin(), nodes.end()); int idx1 = 0; int idx2 = nodes.size()-1; while(idx1 < idx2) { int curSum = nodes[idx1].value+nodes[idx2].value; if(curSum > target) idx2--; else if(curSum < target) idx1++; else break; } //save & return vector
result; result.push_back(min(nodes[idx1].index+1, nodes[idx2].index+1)); result.push_back(max(nodes[idx1].index+1, nodes[idx2].index+1)); return result; }};

转载地址:http://dhxti.baihongyu.com/

你可能感兴趣的文章
laravel 修改api返回默认的异常处理
查看>>
laravel事务
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>
前阿里手淘前端负责人@winter:前端人如何保持竞争力?
查看>>
【JavaScript 教程】面向对象编程——实例对象与 new 命令
查看>>
我在网易做了6年前端,想给求职者4条建议
查看>>