当前位置: 首页 > wzjs >正文

男女做的那个视频网站永久免费自助建站软件

男女做的那个视频网站,永久免费自助建站软件,用c 做网站设计系统的项目作业,品牌建设传播网站公司LeetCode 1. 两数之和(暴力 vs 哈希表) 题目描述 给定一个整数数组 nums 和一个整数 target,要求找出数组中和为目标值的两个数,并返回它们的下标。假设每个输入只有一种答案,且同一元素不能重复使用。 示例&#xf…

LeetCode 1. 两数之和(暴力 vs 哈希表)


题目描述

给定一个整数数组 nums 和一个整数 target,要求找出数组中和为目标值的两个数,并返回它们的下标。假设每个输入只有一种答案,且同一元素不能重复使用。

示例
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:nums[0] + nums[1] = 2 + 7 = 9


解题思路

两种核心解法:

  1. 暴力循环法:双重遍历所有可能的组合,找到和为 target 的两个数。
  2. 哈希表法:利用哈希表存储“补数”,将时间复杂度优化到 O(n)

方法一:暴力循环法

直接遍历数组中的每一对组合,检查它们的和是否等于 target
时间复杂度O(n²)
空间复杂度O(1)

public int[] twoSum_1(int[] nums, int target) {int[] result = new int[2];for (int i = 0; i < nums.length; i++) {for (int j = i + 1; j < nums.length; j++) {if (nums[i] + nums[j] == target) {result[0] = i;result[1] = j;return result; // 找到后立即返回}}}return result;
}

代码优化点

  • 找到答案后立即返回,减少不必要的循环。
  • 内层循环从 i+1 开始,避免重复检查 (i,j)(j,i)

缺点
当数组长度较大时(例如 n=10^4),需要循环约 5×10^7 次,性能较差。


方法二:哈希表法

核心思想:用空间换时间

  1. 遍历数组,将每个数及其索引存入哈希表。
  2. 再次遍历数组,检查 target - nums[i] 是否存在于哈希表中,并确保不是当前元素本身。

时间复杂度O(n)
空间复杂度O(n)(哈希表存储所有元素)

public int[] twoSum_2(int[] nums, int target) {HashMap<Integer, Integer> map = new HashMap<>();// 第一次遍历:存储所有元素及其索引for (int i = 0; i < nums.length; i++) {map.put(nums[i], i);}// 第二次遍历:查找补数for (int i = 0; i < nums.length; i++) {int temp = target - nums[i];if (map.containsKey(temp) && map.get(temp) != i) {return new int[]{i, map.get(temp)}; // 直接返回结果}}return new int[2];
}

关键点解释

  • 补数:即 temp = target - nums[i],若 temp 存在于哈希表中,则说明找到答案。
  • 避免重复使用同一元素:通过 map.get(temp) != i 确保两个下标不同。
  • 哈希表的覆盖问题:若数组中有重复元素(如 nums = [3,3]),后一个元素的索引会覆盖前一个。但由于题目保证只有一个答案,覆盖不影响结果正确性。

示例分析(以 nums = [3,3], target = 6 为例):

  1. 第一次遍历后,哈希表存储为 {3 → 1}(后面的 3 覆盖了前面的 3)。
  2. 第二次遍历时,i=0,计算 temp = 6-3=3,哈希表中存在且 map.get(3)=1 ≠ 0,返回 [0,1]

哈希表法的优化

可以合并两次遍历为一个循环,边存边查:

public int[] twoSum_2_optimized(int[] nums, int target) {HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int temp = target - nums[i];if (map.containsKey(temp)) {return new int[]{map.get(temp), i};}map.put(nums[i], i); // 先查后存,避免同一元素被重复使用}return new int[2];
}

优势

  • 只需一次遍历,可能在未填充完哈希表时就找到答案。
  • 解决元素覆盖问题(例如 nums = [3,2,3], target = 6,先存 3→0,后面遇到 3 时直接返回)。

总结

方法时间复杂度空间复杂度适用场景
暴力循环法O(n²)O(1)数据量小或面试中快速实现
哈希表法O(n)O(n)数据量大,追求高效

推荐使用哈希表法,尤其在处理大规模数据时,性能优势明显。在实际面试中,可以先写出暴力解法,再优化为哈希表法,展示对时间复杂度的敏感度。

力扣通过截图

暴力循环

在这里插入图片描述

哈希法

在这里插入图片描述

http://www.dtcms.com/wzjs/121101.html

相关文章:

  • wordpress 主题白屏杭州seo 云优化科技
  • 一个网站开发小组怎么在百度做免费推广
  • 呼和浩特市城乡建设委员会网站yahoo引擎入口
  • 广西省住房和城乡建设厅网站seo关键词排名系统
  • 小微企业建站网站推广软件哪个最好
  • 网站图片命名规范搜索引擎优化的技巧
  • 建设机械网站资讯seo sem是啥
  • 广州网站建设哪家专业代运营
  • 国外建设网站的软件seoul怎么读
  • 网站每年多少钱图片优化软件
  • 网站前台修改后台对接不上针对大学生推广引流
  • 电影网站建设公司网上推广渠道有哪些
  • 太原网站建设价格低如何建网址
  • 网站搭建与推广如何做网站推广优化
  • 网站开发选择框代码推广之家app下载
  • 花生壳申请了域名 怎么做网站雅虎搜索引擎首页
  • 雄县没有做网站的公司百度站长工具平台
  • 做文件的网站连接交换
  • 不建网站可不可以做cpa企业网络营销策划
  • 深圳福田做网站百度联盟点击广告赚钱
  • 做小程序好还是做微网站好西安百度推广公司
  • 网站建设大企业百度软件中心官网
  • 网站图片多大合适广州网站建设
  • 文创产品设计公司运营seo是什么意思
  • 做网站需要备案吗深圳高端网站建设公司
  • 创业做app哪个网站好推广页面
  • 宁波城乡住房建设厅网站首页学生个人网页制作html代码
  • 做购物网站那个好宁波seo推广哪家好
  • 自己做的网站手机不能看seo网站推广报价
  • 毕业设计做网站论文好写吗电商平台发展现状与趋势