zoukankan      html  css  js  c++  java
  • 1.Two Sum解答随笔

    Decsription:

    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.

     for example

    Given nums = [2, 7, 11, 15], target = 9,
    
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1].
    

    难度:easy。

    在解答方法中,根据它给出的解答框架使用了vector容器作为解题的工具。这里摘录vector的相关属性如下,以备记忆

    解题思路:

          1.定义一个vector容器nums1作为输入数组的替身,对该替身使用sort函数进行内部元素的排序。

          2.接着,对头尾两端(以num1[a],num1[b]代替)元素进行加法操作,如果结果等于target,则进入下一步骤;否则比较相加结果与target的大小,若大于target,则末端b自减1,反之a自加1。该循环在相加结果等于target时结束

          3.经过步骤2,已经得到了nums1中符合题目要求的元素位置,此时需要找到nums中对应的元素位置,所以设置一个循环部分检测nums1与nums中哪些元素相等,保存位置信息,最后输出。

    这个方法的步骤2其实与快速排序中的遴选关键字的方法相似。由于前期已经把nums1的元素排好顺序,所以这种方法不会遗漏掉符合条件的元素。

    代码如下:

    class Solution {
    public:

    vector<int> twoSum(vector<int>& nums, int target) {
    vector<int> nums1=nums;
    sort(nums1.begin(),nums1.end());
    int x=0,y=nums1.size()-1;

    while(x<y){
    if(nums1[x]+nums1[y]>target) y--;
    else if(nums1[x]+nums1[y]<target) x++;
    else break;
    }

    vector<int> answer;
    for(int i=0;i<nums.size();i++){
    if(nums[i]==nums1[x]) answer.push_back(i);
    else if(nums[i]==nums1[y]) answer.push_back(i);
    }

    if(answer[0]>answer[1]) swap(answer[0],answer[1]);
    return answer;
    }
    };

     
  • 相关阅读:
    算法面试题
    学习进度条(一)
    代码作业——四则运算
    构建之法阅读笔记01
    本学期的阅读计划与快速阅读《构建之法》后提出问题
    自我介绍及学期目标
    对天天开心消消乐(订餐系统)的建议
    《构建之法》阅读笔记01-快速阅读后的几个问题。
    二柱子之随机四则运算
    自我介绍
  • 原文地址:https://www.cnblogs.com/sarahp/p/6436098.html
Copyright © 2011-2022 走看看