zoukankan      html  css  js  c++  java
  • Two Sum

    题目链接

    Two Sum - LeetCode

    注意点

    • 这题似乎结果排序不重要,也就是说[0,1]和[1,0]是一样的

    解法

    解法一:看到题目第一反应就是遍历数组,时间复杂度为O(n^2)。抱着试一试的心态打了一下,居然过了。

    int* twoSum(int* nums, int numsSize, int target) {
        int* anw = (int *) malloc(2 * sizeof(int));
        int i,j;
        for(i = 0;i < numsSize;i++)
        {
            for(j = i+1;j < numsSize;j++)
            {
                if(nums[i] + nums[j] == target)
                {
                    anw[0] = i;
                    anw[1] = j;
                }
            }
        }
        return anw;
    }
    

    解法二:用map保存每个数字出现的位置,时间复杂度为O(n)

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            map<int,int> myMap;
            vector<int> anw;
            for(int i = 0;i < nums.size();i++)
            {
                if(myMap.count(target - nums[i]))
                {
                    anw.push_back(i);
                    anw.push_back(myMap[target - nums[i]]);
                }
                myMap[nums[i]] = i;
            }
            return anw; 
        }
    };
    

    解法三:数组快速排序,维护两个指针,一个指向头部一个指向尾部,如果头部加尾部的值小于target,头部指针向后移动;如果大于target,尾部指针向前移动。排序过程中注意保存数字新下标和原来下标的对应关系。时间复杂度O(nlogn),并没有优于解法二我就不打了 (其实是我忘了快排怎么打)

    小结

    • 太久没打代码了,这么简单的题目都要想半天...
    • STL容器的使用忘光了,是不能用这种方式赋值的,还查了半天错( ╯□╰ )
    vector<int> anw;
    anw[0] = 1;
    
  • 相关阅读:
    Server responded "Algorithm negotiation failed" SSH Secure链接服务器错误
    简单实现elementui的el-container布满全屏
    安装apue.h
    编译原理
    点亮一盏灯
    什么是Complement(补码)?(转)
    轻松学C语言
    求二进制表示
    gst-launch-1.0 (1)
    使用docker-compose 大杀器来部署服务 上 (转)
  • 原文地址:https://www.cnblogs.com/multhree/p/10290272.html
Copyright © 2011-2022 走看看