八千里路云和月

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  62 随笔 :: 0 文章 :: 0 评论 :: 37899 阅读

题目


 

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

 

解法


我的答案----暴力求解

遍历两次,代码如下

复制代码
 1 // kurrrr
 2 class Solution {
 3 public:
 4     vector<int> twoSum(vector<int>& nums, int target) {
 5         vector<int> answer;
 6         for(int i=0; i<nums.size(); i++){
 7             for(int j=i+1; j<nums.size(); j++){
 8                 if(j==i)  continue;
 9                 if((target-nums[i]) == nums[j]){
10                     answer.push_back(i);
11                     answer.push_back(j);
12                     break;
13                 }
14             }  
15         }
16         return answer;
17     }
18 };
19 
20 
21 
22 // leetcode
23 class Solution {
24     public int[] twoSum(int[] nums, int target) {
25         for (int i = 0; i < nums.length; i++) {
26             for (int j = i + 1; j < nums.length; j++) {
27                 if (nums[j] == target - nums[i]) {
28                     return new int[] { i, j };
29                 }
30             }
31         }
32         throw new IllegalArgumentException("No two sum solution");
33     }
34 }
复制代码

 建议解法----哈希表

哈希表:可以根据 key 值访问数据。

在这里,可以将数组值与其索引关联成哈希表,这样去寻找某特定值得时候就不用遍历数组,从而节省了时间复杂度。

 

复制代码
 1 class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         Map<Integer, Integer> map = new HashMap<>();
 4         for (int i = 0; i < nums.length; i++) {
 5             map.put(nums[i], i);
 6         }
 7         for (int i = 0; i < nums.length; i++) {
 8             int complement = target - nums[i];
 9             if (map.containsKey(complement) && map.get(complement) != i) {
10                 return new int[] { i, map.get(complement) };
11             }
12         }
13         throw new IllegalArgumentException("No two sum solution");
14     }
15 }
16 
17 
18 作者:LeetCode
19 链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-2/
20 来源:力扣(LeetCode)
21 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code
复制代码

 

说明


复杂度

时间复杂度:执行一段代码所消耗的时间,即代码执行了多少行。通常用大O表示,常用的时间复杂度有O(1),O(logn),O(n),O(n2).

空间复杂度执行一段代码所消耗的内存。通常用大O表示,常用的空间复杂度有O(1),O(n),O(n2).

 

posted on   hanX3  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示