• 1.两数之和


    题目链接

    暴力

    直接利用双重循环找到当前值和数组中另一个值是否相加等于target
    时间复杂度O(n2)

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            for(int i = 0; i < nums.size(); ++ i){
                for(int j = i + 1; j < nums.size(); ++ j){
                    if(nums[i] + nums[j] == target){
                        return {i, j};
                    }
                }
            }
    
            return {}; 
        }
    };
    

    双指针

    利用双指针的做法可以将时间复杂度给降低,但是前提是数组是有序数据,所有可以先将数组进行排序,之后使用首尾指针找符合的数对
    时间复杂度为:O(n\(log_n\))

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            vector<pair<int, int>> res;
            for(int i = 0; i < nums.size(); ++ i){
                res.push_back({nums[i], i});
            }
    
            sort(res.begin(), res.end());
            int l = 0, r = res.size() - 1;
            while(l < r){
                int t = res[l].first + res[r].first;
                if(t == target) return {res[l].second, res[r].second};
                else if(t < target) l ++;
                else r --;
            }
    
            return {};
        }
    };
    

    哈希表

    在进行遍历的过程中,记录前面每一个值的对应的下标,在遍历到当前值\(X\)的时候找前面是否出现过\(target - x\),如果出现了直接返回这一数对即可。
    时间复杂度为:O(n)

    CPP

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

    Java

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            HashMap<Integer, Integer> map = new HashMap<>();
            int[] res = new int[2];
            for(int i = 0; i < nums.length; ++ i){
                int temp = target - nums[i];
                if(map.containsKey(temp)){
                    res[0] = map.get(temp);
                    res[1] = i;
                    break;
                }
                map.put(nums[i], i);
            }
            return res;
        }
    }
    
  • 相关阅读:
    站点防攻击之禁止国外ip
    docker 安装rabbitMQ
    【转】浅析支付系统的整体架构
    【转】MQ详解及四大MQ比较
    SQL server 中的dbo、guest
    网站加载速度的优化(1):优化前端页面
    【转】Apache ab压力测试
    Asp.Net Core 部署发布后EFCore数据库断连和Google浏览器无法存储Cookie
    C# 使用nuget.exe发布类库及更新类库
    .net core 读取Excal文件数据及注意事项
  • 原文地址:https://www.cnblogs.com/Lngstart/p/16001617.html
Copyright © 2020-2023  润新知