• 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;
    }
    };

     
  • 相关阅读:
    sql server mdx
    mysql 按照 汉字的第一个拼音排序
    转,mysql的select * into
    mysql 日期的操作
    google 地图api
    ip_test
    AJAX (转w3cschool)
    jquery ajax 失败
    安装AdventureWorks2008R2示例数据库
    弹出新的网页窗口 js
  • 原文地址:https://www.cnblogs.com/sarahp/p/6436098.html
Copyright © 2020-2023  润新知