【LeetCode】1. 两数之和

题目链接

文章目录

    • Python3
      • [方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup O(N^2)、O(1)\rgroup ⟮O(N2)、O(1)⟯](#方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup O(N^2)、O(1)\rgroup ⟮O(N2)、O(1)⟯)
      • [方法二:哈希表 ⟮ O ( N ) ⟯ \lgroup O(N)\rgroup ⟮O(N)⟯](#方法二:哈希表 ⟮ O ( N ) ⟯ \lgroup O(N)\rgroup ⟮O(N)⟯)
    • C++
      • [方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup O(N^2)、O(1)\rgroup ⟮O(N2)、O(1)⟯](#方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup O(N^2)、O(1)\rgroup ⟮O(N2)、O(1)⟯)
        • [C++ 的数组 是 { } 形式](#C++ 的数组 是 { } 形式)
      • [方法二:哈希表 ⟮ O ( N ) ⟯ \lgroup O(N)\rgroup ⟮O(N)⟯](#方法二:哈希表 ⟮ O ( N ) ⟯ \lgroup O(N)\rgroup ⟮O(N)⟯)


Python3

方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup O(N^2)、O(1)\rgroup ⟮O(N2)、O(1)⟯

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        for i in range(n):
            for j in range(i+1, n):
                if nums[i] + nums[j] == target:
                    return [i, j]

        return []

方法二:哈希表 ⟮ O ( N ) ⟯ \lgroup O(N)\rgroup ⟮O(N)⟯

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic = {}
        for i, num in enumerate(nums):
            if target - num in dic:
                return [dic[target-num], i]
            else:
                dic[num] = i 
        return []

C++

方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup O(N^2)、O(1)\rgroup ⟮O(N2)、O(1)⟯

cpp 复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        for (int i = 0; i < n; ++i){
            for (int j = i + 1; j < n; ++j){
                if (nums[i] + nums[j] == target){
                    return {i, j};   // 怎么是这种形式呢
                }
            }
        }
        return {};
    }
};
C++ 的数组 是 { } 形式

文档, 这样看来,只有 { } 这种形式

方法二:哈希表 ⟮ O ( N ) ⟯ \lgroup O(N)\rgroup ⟮O(N)⟯

cpp 复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> dic;
        for (int i = 0; i < nums.size(); ++i){
            auto it = dic.find(target - nums[i]); // auto 代替 迭代器类型, 提示编译器自动识别。简化代码
            //这里等效于
            //unordered_map<int, int>::iterator it = dic.find(target - nums[i]);
            if (it != dic.end()){
                return {it->second, i}; // 注意 字典 的 find 函数 会同时返回 键和值 
            }
            else{
                dic[nums[i]] = i;
            }
        }
        return {};        
    }
};
unordered_map::find

unordered_map::find 文档



这样看来用 result 好些,因为不一定是正确答案。

相关推荐
এ᭄画画的北北33 分钟前
力扣-5.最长回文子串
算法·leetcode
点云侠1 小时前
【2025最新版】PCL点云处理算法汇总(C++长期更新版)
c++·算法·计算机视觉·3d·可视化
Mr_Xuhhh2 小时前
传输层协议 TCP(1)
运维·服务器·网络·c++·网络协议·tcp/ip·https
sTone873753 小时前
QuickJS 的核心概念和核心 API
前端·c++
草莓熊Lotso3 小时前
《吃透 C++ 类和对象(中):拷贝构造函数与赋值运算符重载深度解析》
开发语言·c++·经验分享·笔记·其他
楚Y6同学3 小时前
QT之键盘控制虚拟遥控系统开发总结
开发语言·c++·qt·串口通信
zyd09153 小时前
代码随想录Day50:图论(图论理论、深度搜索理论、所有可达路径、广度搜索理论)
java·数据结构·算法·leetcode·图论
啊阿狸不会拉杆4 小时前
《算法导论》第 22 章 - 基本的图算法
c++·算法·排序算法·图论·拓扑学
melonbo5 小时前
桥接模式C++
开发语言·c++·设计模式·桥接模式
现在,此刻13 小时前
leetcode 11. 盛最多水的容器 -java
java·算法·leetcode