LeetCode 1.两数之和
Posted 咸鱼の小窝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1.两数之和相关的知识,希望对你有一定的参考价值。
题意
从数组中找出两个不同的整数,使得他们的和恰好为要求得到的数。输出他们的下标。
思路
- 想法1:最直观的思路——二重循环遍历,时间复杂度(O(n^2))。太暴力了,考虑优化。
- 想法2:如果序列是有序的话,可固定
x
然后从数组中二分查找target - x
。时间复杂度(O(n*logn))。 - 想法3:利用桶排序的思想,存储每个数出现的次数,当遍历到
x
时看桶中是否存在target - x
。时间复杂度(O(n))。数据范围不知道,数组没法开,所以这个“桶”可用map实现。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> MP;
for(int i = 0; i < nums.size(); ++i)
{
if(MP.count(target - nums[i]))
return {i, MP[target - nums[i]]};
MP[nums[i]] = i;
}
return {-1, -1};
}
};
总结
这是第一次使用LeetCode
,所以有些生疏。
首先是要提交的代码格式,给出了Solution
的大体框架,像是做填空题一般要把自己的解法填上,这是和之前刷其他OJ最明显的不同点。
其次是这道题返回的值,返回的是个二元组,一开始没反应过来该怎么写。
最后是对规范性的要求,以为给定的数据一定会满足条件,所以没加找不到时返回{-1, -1};
,但这样编译也通过不了。
都说“万事开头难”,现在我博客也搭好了,也通过AC第一道题熟悉了OJ的使用。接下来开始策马奔腾吧!冲冲冲!!!
以上是关于LeetCode 1.两数之和的主要内容,如果未能解决你的问题,请参考以下文章