1. 两数之和 LeetCode

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

AC代码    执行用时:196 ms

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         vector<int> result;
 5         for(int i = 0; i < nums.size() ; i++) {
 6             for(int j = i + 1; j < nums.size(); j++) {
 7                 if(nums[i] + nums[j] == target) {
 8                     result.push_back(i);
 9                     result.push_back(j);
10                     return result; 
11                 }
12             }
13         }
14           
15     }
16 };

范例AC代码  执行用时:4 ms   

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         vector<int> arr(nums);
 5         sort(arr.begin(), arr.end());
 6         int i = 0, j = arr.size() - 1;
 7         while (i < j)
 8         {
 9             if (arr[i] + arr[j] < target)
10                 i++;
11             else if (arr[i] + arr[j] > target)
12                 j--;
13             else
14                 break;
15         }
16         vector<int> ret;
17         int a = distance(nums.begin(), find(nums.begin(), nums.end(), arr[i]));
18         reverse(nums.begin(),nums.end());
19         int b = nums.size() - 1 - distance(nums.begin(), find(nums.begin(), nums.end(), arr[j]));
20         ret.push_back(a);
21         ret.push_back(b);
22         return ret;
23     }
24 };

继续加油~

原文地址:https://www.cnblogs.com/jj81/p/8945871.html