LeetCode题解 week1
来源:互联网 发布:网络大电影播放量分红 编辑:程序博客网 时间:2024/06/05 16:32
第一次尝试便先从简单的入手
Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.Example
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
最简单的解题思路便是用result来存储输出,利用两个变量i、j做二重循环来搜索符合目标结果的对应元素。i用于顺序遍历整个nums中的元素,j用于查找i之后是否存在符合nums[i] + nums[j] == target的数。
代码如下
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; for(int i = 0; i < nums.size(); i++) { for(int j = i + 1; j < nums.size(); j++) { if(nums[j] == target - nums[i]) { result.push_back(i); result.push_back(j); return result; } } } return result; }};
显然这并不是最优解,两重循环会导致
代码如下
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; unordered_map<int, int> nums_map; for(int i = 0; i < nums.size(); i++) nums_map[nums[i]] = i; for(int i = 0; i < nums.size(); i++) { if(nums_map.find(target - nums[i]) != nums_map.end() && nums_map[target - nums[i]] != i) { result.push_back(i); result.push_back(nums_map[target - nums[i]]); return result; } } return result; }};
当然还有更加优化的方法,比如说在discuss里面很多人选择的一边比较一边插入到哈希表当中,而不是一开始直接将nums全部写入哈希表。这道题的关键还是要学会选择合适的map来辅助、优化,从而达到更优的查找效率。
- LeetCode题解 week1
- leetcode week1
- Leetcode Week1
- leetcode-month1-week1
- week1
- week1
- week1
- week1
- week1
- week1
- Leetcode: 70. Climbing Stairs(Week1, Easy)
- Leetcode:93. Restore IP Addresses(Week1, Medium)
- week1-leetcode #1-Two Sum[Easy]
- leetcode题解
- leetcode题解
- LeetCode 题解
- leetCode题解
- leetcode题解
- LeetCode OJ-129.Sum Root to Leaf Numbers
- Tomcat+JNDI配置
- 来自js精粹里的一些知识点
- Makefile基础教程 3
- 分页查询
- LeetCode题解 week1
- 进程管理
- React Native 启动页广告图预加载
- 出现addLoadEvent错误
- 基于Redis的简单分布式锁的原理
- Makefile基础教程 4
- Spring RESTful风格url示例
- Docker技术剖析Docker网络配置(一)
- week1-leetcode #1-Two Sum[Easy]