zoukankan      html  css  js  c++  java
  • 1.两数之和

    1.两数之和 原题链接

    题解

    在数组中找到一组数组使得他们的和为目标值,最容易想到的方式是暴力的做法,直接利用两个循环

    代码如下:

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

    上述的方法的时间复杂度为O(n^2),时间复杂度较高,因此我们可以优化内层循环,使用哈希表的方式

    代码如下:

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

    上述的哈希表的方式,只要不存在大量的哈希冲突(一般也不会存在,除非题目故意卡你),查找和插入的时间复杂度近似为常数级,所以时间复杂度为O(N)

    来个Java版本的

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            int len = nums.length;
            if(len == 0) return null;
            HashMap<Integer, Integer> map = new HashMap<>();
            for(int i = 0; i < len; ++i){
                int t = target - nums[i];
                if(map.get(t) != null) return new int[]{map.get(t), i};
                map.put(nums[i], i);
            }
            return null;
        }
    }
    
  • 相关阅读:
    spring-boot整合dubbo:Spring-boot-dubbo-starter
    基于Spring的轻量级工作流框架
    Spring多种加载Bean方式简析
    Spring Dubbo 开发笔记
    基于Spring开发——自定义标签及其解析
    Navicat连接MySQL8.0亲测有效
    学习Python中遇到的各种错误
    字符串转字典
    set(待整理)
    C++中虚析构的作用
  • 原文地址:https://www.cnblogs.com/Lngstart/p/13202524.html
Copyright © 2011-2022 走看看