美文网首页
vector打印出符合X+Y=Z条件的X,Y元素下标-LeetC

vector打印出符合X+Y=Z条件的X,Y元素下标-LeetC

作者: 简石榴 | 来源:发表于2017-07-21 18:39 被阅读0次

在LeetCode编了一些不合格的代码


Problem

Two Num

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:

Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].

给定一组整数,将两个数的返回指数相加,使它们相加成一个特定的目标。您可以假设每个输入都有一个解决方案,您可能不会使用相同的元素两次。

Tips :稍后我们还可以看到LeetCode上关于这个问题推荐的几种方法。

对于这个问题,要在一组数中找到符合X+Y=target条件的X,Y两个值对应的下标,可以随机的在这组数中选取一个值,即尝试遍历这组数中的其它值。看是否符合X+Y=target.
符合即可return.

我最初想的比较简单,要用Vector容器。因为在上面的example 中 显示 return [0,1],可见返回结果是个数组类型.当然我们也可以定义一个大小为2的Array类型。但是我们要尽快的对C++的一些东西熟悉起来,我们可以用Vector容器类型充当它的返回值。

关于Vector容器

#include <iostream>
#include <Vector>

using namespace std;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> value;

        for(int i=0;i<nums.size();i++){
            for(int j=nums.size()-1;j>i;j--){
            if(target==nums[j]+nums[i]){
                value.push_back(i);
                value.push_back(j);
            }
            }
        }
        return value;
    }
};

int main() {

    vector<int> b{1,2,4,5};
    Solution *sa=new Solution();

    for(auto i : sa->twoSum(b,9)){
        cout<<i<<"--";
    }
    cout<<endl;
    return 0;
}
输出结果:  2--3--

main函数中我们构造的数据,9->6时,输出结果:0--3--1--2--
因为问题中存在假设每个输入都有一个解决方案 所以对输出一个还是两个对我们都没有太大影响,问题的目的已经达到了。

上面是我的做法,在LeetCode上看完一些讨论之后,将他们的结果贴到下面。毕竟要写出好的代码,就要多看多想多对比。

Discuss

vector<int> twoSum(vector<int> &numbers, int target)
{
    //Key is the number and value is its index in the vector.
    unordered_map<int, int> hash;
    vector<int> result;
    for (int i = 0; i < numbers.size(); i++) {
        int numberToFind = target - numbers[i];

            //if numberToFind is found in map, return them
        if (hash.find(numberToFind) != hash.end()) {
                    //+1 because indices are NOT zero based
            result.push_back(hash[numberToFind] + 1);
            result.push_back(i + 1);            
            return result;
        }

            //number was not found. Put it in the map.
        hash[numbers[i]] = i;
    }
    return result;
}
//unordered_map(C++ 11特性)与map的不同之处,就是它的内部元素是无序的。


(java)
public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        map.put(nums[i], i);
    }
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsKey(complement) && map.get(complement) != i) {
            return new int[] { i, map.get(complement) };
        }
    }
    throw new IllegalArgumentException("No two sum solution");
}


(java)
public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsKey(complement)) {
            return new int[] { map.get(complement), i };
        }
        map.put(nums[i], i);
    }
    throw new IllegalArgumentException("No two sum solution");
}

OK 到这里我们也看到了不同的实现方法,我编写的方法,也是最容易想到的,但是时间复杂度上确不如他们。
下一篇文章是关于链表的合并,然后介绍一些链表上的操作,如果你还想看,留言吧

最后文章读到这里的你,有什么好的想法,建议,欢迎在评论区留言。

相关文章

  • vector打印出符合X+Y=Z条件的X,Y元素下标-LeetC

    在LeetCode编了一些不合格的代码 Problem Two Num Given an array of int...

  • python 解多元一次方程

    x+y=10x+z=20y+z=24

  • 向量的内积和范数

    向量内积 设有n维列向量 对称性[x,y] = [y,x] 线性性质[ax,y]=a[x,y][x+y,z]=[x...

  • x+y=z

    x:有形条件 y:无形条件 z:结果

  • LATEX 汇总

    LaTeX常用语法 常用数学表达 符号含义输入举例输出$ $包含公式$x+y​$Y_{}下标Y_1X^{}上标X^...

  • JaveScript 基本语法的学习

    1. 变量 使用var来定义变量,例子如下var x = 2; var y = 3; var z = x+y; 变...

  • threeJs基础(2)

    基础元素 1.点 var point1 = new THREE.Vector3(x,y,z); 2.线 var g...

  • 未知元

    X+Y=Z X=a+b Y=c+d Z=h+g a+b+c+d=h+g 知道的越多,不知道的会更多。 与未知打交道...

  • 11. 高阶函数

    [TOC] 高阶函数 匿名函数 lambda x:x+y #return x+y定义标志/参数(形式类似函数传参)...

  • 爱情是X+Y=Z

    学方程式X+Y=Z,老师说知道两个数就可以求出另一个数。 例如知道女人和孩子,就可以求出孩子她爹是谁?这么简单的道...

网友评论

      本文标题:vector打印出符合X+Y=Z条件的X,Y元素下标-LeetC

      本文链接:https://www.haomeiwen.com/subject/fumrkxtx.html