LeetCode Solution-1

蔚落 2023-08-17 17:45 214阅读 0赞
  1. 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].

思路1:利用哈希表。

  1. 首先新建一个哈希表(unordered_map),存储输入数组元素及对应的下标。
  2. 对数组元素进行遍历,对每个值得到其和目标值的差值(dif),在数组中寻找dif,如果存在且下标不重复即得到结果,若遍历后无结果则返回空数组。

Solution:

  1. vector<int> twoSum(vector<int>& nums, int target) {
  2. unordered_map<int, int> num_id;
  3. for (int i = 0; i < nums.size(); i++) {
  4. num_id[nums[i]] = i;
  5. }
  6. for (int i = 0; i < nums.size(); i++) {
  7. int dif = target - nums[i];
  8. auto dif_id = num_id.find(dif);
  9. if (dif_id != num_id.end() && dif_id->second != i)
  10. return vector<int>{i, dif_id->second};
  11. }
  12. return vector<int>();
  13. }

性能:
Runtime: 8 ms  Memory Usage: 10.5 MB

思路2:对数组排序

  1. 先保存原数组为num,然后对原数组按从小到大进行排序;
  2. 设定2个值begin和end分别作为开始和结束值的下标;
  3. 比较nums[beign]和nums[end]的和sum与target的大小,若sum < target,则说明2数偏小,begin++;若sum > target,则说明两数之和偏大,end—;如果sum = target,则进入4;
  4. 在num中分别查找nums[begin]和nums[end]对应的下标值,并判断2数是否相等,若不相等即是最后的输出。

Solution:

  1. vector<int> twoSum(vector<int>& nums, int target) {
  2. vector<int> num, res;
  3. int n = nums.size();
  4. num = nums;
  5. sort(nums.begin(), nums.end());
  6. int begin = 0, end = n - 1;
  7. while (begin < end) {
  8. int sum = nums[begin] + nums[end];
  9. if (sum < target) begin++;
  10. else if (sum > target) end--;
  11. else
  12. {
  13. for (int i = 0; i < n; i++) {
  14. if (num[i] == nums[begin]) {
  15. res.push_back(i);
  16. break;
  17. }
  18. }
  19. for (int i = 0; i < n; i++) {
  20. if (num[i] == nums[end] && i != res[0]) {
  21. res.push_back(i);
  22. break;
  23. }
  24. }
  25. return res;
  26. }
  27. }
  28. return res;
  29. }

性能:
Runtime: 8 ms  Memory Usage: 9.5 MB

转载于:https://www.cnblogs.com/dysjtu1995/p/11477017.html

发表评论

表情:
评论列表 (有 0 条评论,214人围观)

还没有评论,来说两句吧...

相关阅读