LeetCode-TwoSum
来源:互联网 发布:vue js 编辑:程序博客网 时间:2024/05/16 13:38
题目:
给一串数字和一个目标数字,在数字串中寻找两个数加起来等于目标数字的数,返回其下标。
方法一(12ms):
vector<int> twoSum(vector<int>& nums, int target) {vector<int> oldvector=nums; //保存一份原始vectorint low,high,mid;int num1=0,num2=0;int index1=0,index2=0; //两个加起来等于target的数vector<int> vec(0,0); //用于返回的sort(nums.begin(),nums.end());//先排序for(int i=0;i<nums.size();i++){low=0,high=nums.size()-1;while (low<=high){mid=(low+high)/2;if((target-nums[i])==nums[mid]) //找到相加等于target的两个数{num1=nums[i];num2=nums[mid];break;}else if((target-nums[i])<nums[mid])high=mid-1;else low=mid+1;}if(num1>0||num2>0)break;}for(int j=0;j<oldvector.size();j++){if(num1==oldvector[j]||num2==oldvector[j]){if(index1>0){index2=j+1;break;}index1=j+1;}}vec.push_back(index1);vec.push_back(index2);return vec; }
方法一升级版:
vector<int> twoSum(vector<int>& nums, int target) { vector<int> ns=nums; sort(ns.begin(), ns.end()); int a=0, b=ns.size()-1; while (a < b) if (ns[a]+ns[b] > target) b--; else if (ns[a]+ns[b] < target) a++; else break; vector<int> ans; for (int i=0; i<nums.size(); i++) { if (nums[i]==ns[a]) ans.push_back(i+1); else if (nums[i]==ns[b]) ans.push_back(i+1); } if (ans[0]>ans[1]) swap(ans[0], ans[1]); return ans; }
方法二(用数组,网上的):
vector<int> twoSum(vector<int>& nums, int target) { static int MAX = 99999; static int DELT = 49999; vector<int> ans; int x[MAX]; memset(x, 0, sizeof(x)); for (int i = 0; i < nums.size(); i++) { if (x[nums[i] + DELT]) { ans.push_back(((i + 1) < x[nums[i] + DELT] ? (i + 1) : x[nums[i] + DELT])); ans.push_back(((i + 1) > x[nums[i] + DELT] ? (i + 1) : x[nums[i] + DELT])); return ans; } x[target - nums[i] + DELT] = i + 1; } }
方法三(用map,网上的):
vector<int> twoSum(vector<int>& nums, int target) { map<int,int> map1; for(int i = 0; i < nums.size(); i++) { if(map1.find(target-nums[i]) != map1.end()) { vector<int> a = { map1[target-nums[i]], i+1}; return a; } map1[nums[i]] = i+1; } }
0 0
- [leetcode]-twoSum
- [leetcode]twoSum
- LeetCode-TwoSum
- 【Leetcode】TwoSum
- LeetCode - TwoSum
- leetcode :twoSum
- leetcode TwoSum
- leetcode twosum
- leetcode--twoSum
- LeetCode twoSum
- LeetCode-TwoSum
- leetcode--twoSum
- leetcode TwoSum
- TwoSum leetcode
- leetcode:twosum
- leetcode:TwoSum
- LeetCode---TwoSum
- LeetCode-TwoSum
- LintCode-剑指Offer-(1)A+B问题
- Python基本 char和string
- 截取时间戳转码方法
- CNN(卷积神经网络)在视频动作分类中的应用
- LinkedList源码系列(2)
- LeetCode-TwoSum
- <黑马程序员> 第六篇:集合
- Shell脚本
- 【JavaScript】(3)——BOM 与 DOM
- JDK各个版本的新特性jdk1.5-jdk8
- 分布式环境下的id生成方法
- eclipse启动出现“An Error has Occurred. See the log file”解决方法
- 《如何高效学习》心得
- Linux的常用命令1---网络相关(不断添加中)