1.Two Sum leetcode(array)
来源:互联网 发布:ios刷机软件 编辑:程序博客网 时间:2024/05/01 07:56
Two Sum Add to List QuestionEditorial Solution My
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.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
注意,本题中所给定的数组不是排好序的,如果是排好序的则只用使用一前一后的两个指针即可,不是排序的则使用hash的方法更简洁。
方法一、超时的解决方案,因为采用了sort,严重建议对于时间特性很有要求的算法来说,最好不要采用该函数,通常最好的排序算法的时间复杂度最低也为O(logn)
vector<int> twoSum(vector<int>& nums, int target) { int len = nums.size(); int low = 0; int high = len - 1; vector<int> result; sort(nums.begin(),nums.end()); while(low < high) { if(nums[low] + nums[high] == target) { result.push_back(low); result.push_back(high); } else if(nums[low] + nums[high] > target) { high--; } else { low++; } } return result; }
方法二、采用hash_map的方法
vector<int> twoSum(vector<int>& nums, int target) { map<int,int> mp; vector<int> result; for(int i= 0; i<nums.size(); i++) { mp[nums[i]] = i; } for(int i = 0; i<nums.size(); i++) { map<int,int> :: iterator iter; iter = mp.find(target - nums[i]); if(iter != mp.end() && iter->second != i) //注意此处需要加入&& iter->second != i进行判断,以防止nums[i]+nums[i]==target这种情况发生,若发生则只执行一遍循环便终止 { //以下采用两次判断是注意输出的格式是小数在前,大数在后 if(i>iter->second) { result.push_back(iter->second); result.push_back(i); } else if(i<iter->second) { result.push_back(i); result.push_back(iter->second); } break; } } //cout<<result.size()<<"hi"; return result; }
0 0
- 1.Two Sum leetcode(array)
- LeetCode-Array-1. Two Sum
- leetcode.array--1. Two Sum
- Leetcode - Pointers/Array - Two sum
- LeetCode刷题【Array】 Two Sum
- Array -- Leetcode problem1. Two Sum
- LeetCode(Array)---------Two Sum
- [LeetCode]1. Two Sum&167. Two Sum II - Input array is sorted
- LeetCode刷题【Array】 Two Sum II
- [Week 2] [Leetcode][Array] Two Sum
- LeetCode 1. Two Sum
- [LeetCode]1.Two Sum
- LeetCode 1.Two Sum
- LeetCode --- 1. Two Sum
- [Leetcode] 1. Two Sum
- leetcode---1.Two sum
- [Leetcode] 1. Two Sum
- LeetCode 1.Two Sum
- 《Linux操作系统实用教程》笔记之防火墙使用
- RecyclerView Divider完美解决方案
- New Document
- JavaScript 中的“纯函数”
- modernizr的使用
- 1.Two Sum leetcode(array)
- PHP 数据库操作
- 2016-11-25 Ceph
- linux文件初识
- codeWars的一道题目而已
- java基础学习——对象和类
- Intellij IDEA的下载和使用(针对学生的免费使用计划)
- JAVA中用CALENDAR类计算周和周的起始日期
- 收藏夹