You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请教LeetCode中twoSum函数里return {}语句的作用逻辑

关于LeetCode两数之和问题中return {};的疑问解答

你好呀~其实这个问题的核心点在于那行return {};根本不会被执行到,下面给你拆解清楚:

首先先看题目背景:LeetCode的「两数之和」题目明确规定了「输入数组中一定存在唯一的有效解」,这是关键前提。

然后看这段代码的逻辑:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> hashtable;
        for (int i = 0; i < nums.size(); ++i) {
            auto it = hashtable.find(target - nums[i]);
            if (it != hashtable.end()) {
                // 找到符合条件的元素对,直接返回结果,循环终止
                return {it->second, i};
            }
            // 没找到的话,把当前元素和索引存入哈希表
            hashtable[nums[i]] = i;
        }
        // 下面这行代码永远不会被执行
        return {};
    }
};

为什么return {};不会被执行?

因为题目保证了存在唯一解,所以在遍历数组的过程中,必然会有某一个时刻,target - nums[i]恰好存在于之前存入哈希表的元素中(也就是我们要找的另一个数),这时候会立刻执行return {it->second, i};跳出函数,循环根本走不到最后一步。

那为什么还要写这行代码?

这是C++的语法要求:函数声明了返回vector<int>类型,编译器要求函数的所有分支都必须有明确的返回值。虽然我们从逻辑上知道这个分支永远不会走到,但编译器没法理解题目中的业务逻辑,所以必须补上这行代码来满足语法规则,否则编译会报错。

简单总结:return {};确实是返回空的vector,但它只是个语法兜底,实际运行中永远不会被触发,所以代码能正常返回有效结果~

内容的提问来源于stack exchange,提问作者air

火山引擎 最新活动