leetCode-hot100-数组专题之子数组+二维数组

数组专题之子数组+二维数组

    • 子数组
      • 238.除自身以外数组的乘积
      • 560.和为K的子数组
    • 二维数组
      • 48.旋转图像

子数组

数组的子数组问题是算法中常见的一类问题,通常涉及到数组的连续元素。在解决这类问题时,常用的方法有前缀和、滑动窗口、双指针,分治法、动态规划等。下面分别对这几种方法进行简要说明:

  1. 滑动窗口(Sliding Window)
    • 适用于求解和为特定值、最大子数组和、最小子数组和、连续子数组的最大/最小值等问题。
    • 通过维护一个固定大小的窗口,在遍历数组的过程中不断移动窗口的位置,从而解决问题。
    • 常用于优化时间复杂度,避免重复计算。
  2. 双指针(Two Pointers)
    • 适用于求解有序数组中的问题,如两数之和、三数之和、有序数组中的区间和等。
    • 通常使用两个指针,一个从左向右移动,一个从右向左移动,或者一个指针固定,另一个指针移动。
    • 通过指针的移动,可以高效地找到满足条件的元素或子数组。
  3. 分治法(Divide and Conquer)
    • 适用于求解数组排序、数组划分等问题。
    • 将问题分解为若干个规模较小的相同问题,递归解决,最后合并结果。
    • 可以有效利用递归和分而治之的思想,解决复杂问题。
  4. 动态规划(Dynamic Programming)
    • 适用于求解最优解问题,如最长递增子序列、最长公共子序列、最长连续子数组等。
    • 通过将问题分解为更小的子问题,并存储子问题的解,避免重复计算。
    • 常用于优化时间复杂度,减少冗余计算。
  5. 前缀和(Dynamic Programming)
    • 计算数组的前缀和并存储。
    • 遍历前缀和数组,记录下所有满足条件的子数组。

在实际编程中,选择哪种方法取决于问题的具体性质和需求。滑动窗口和双指针通常用于优化时间复杂度,而分治法和动态规划则适用于更复杂的问题。在解决数组子数组问题时,可以根据问题的特点和需求,灵活运用这些方法。

238.除自身以外数组的乘积

思路:
本题需要得到数组中每个元素除本元素之外的所有元素的乘积的子数组,可以先计算出nums[i]左边元素的乘积,并计算出nums[i]右边元素的乘积,最后将两部分结果乘起来就是最后的结果,最后所有的结果保存到ans数组中,以下是一个栗子。
在这里插入图片描述

时间复杂度:
时间复杂度是 O(n),其中 n 是数组 nums 的长度。
代码实现:

class Solution {public int[] productExceptSelf(int[] nums) {int[] ans = new int[nums.length];ans[0] = 1;//将nums[i]左边的元素的乘积存在ans[i]里for(int i = 1;i < nums.length;i++){ans[i] = ans[i - 1] * nums[i - 1];}int rigth = 1;//将nums[i]右边的元素累乘到rigth中for(int i= nums.length - 1;i >= 0;i--){ans[i] *= rigth;rigth *= nums[i];}return ans;}
}

560.和为K的子数组

思路:
使用一个哈希表记录数组所有的前缀和和出现的次数,以前缀和为key,出现的次数为value,判断在哈希表中是否存在sum - k这个键值,若存在说明出现和为K的连续子数组,下面是一个图示:
在这里插入图片描述

在哈希表中存储到每一个元素的前缀和,,那么到j的前缀和和到i的前缀和相减,如果等于K,则说明该子数组和为K,所以可以得到 sum(0,j) - K = sum(0,i - 1),如果哈希表中有sum(0,j) - K这个键值,说明存在和为K的子数组,此时需要将对应的value值与ans相加。
时间复杂度:
时间复杂度为O(n),其中n是数组nums的长度。
代码实现:

class Solution {public int subarraySum(int[] nums, int k) {Map<Integer,Integer> record = new HashMap<>();int sum = 0;int ans = 0;//一定要初始化,初始化record是为了解决累加和等于k的情况。//如果不进行初始化操作,可能会导致错误的计算结果record.put(0,1);for(int i = 0;i < nums.length ; i++){sum += nums[i];if(record.containsKey(sum - k)){ans += record.get(sum - k);}record.put(sum, record.getOrDefault(sum, 0) + 1);}return ans;}
}

二维数组

对于二维数组的旋转问题,找到对应的规律就可以很快的解决。

48.旋转图像

思路:
对二维数组进行顺时针90°的旋转,可以拆分成先将数组按照主对角线进行翻转,然后再将得到的数组左右翻转,模拟的过程如图所示,所以只需要对数组进行两次循环先进行主对角线翻转,然后进行左右翻转即可,详细的讲解点击视频讲解-旋转图像。
在这里插入图片描述

时间复杂度:
用到了两层for循环,故时间复杂度为O(n^2)
代码实现:

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;//按主对角线翻转for(int i = 0; i < n; i++){for(int j = 0; j < i; j++){int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}//左右翻转for(int i = 0; i < n; i++){for(int j = 0; j < n / 2; j++){int temp = matrix[i][j];matrix[i][j] = matrix[i][n - j - 1];matrix[i][n - j - 1] = temp;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/335838.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sping源码(九)—— Bean的初始化(非懒加载)— getMergedLocalBeanDefinition

序言 前两篇文章介绍了Bean初始化之前的一些准备工作&#xff0c;包括设置BeanFacroty的ConversionService属性以及将Bean进行冻结。这篇文章将会进入到preInstantiateSingletons方法。进一步了解Bean的初始化流程。 preInstantiateSingletons public void preInstantiateSin…

一篇文章讲透排序算法之快速排序

前言 本篇博客难度较高&#xff0c;建议在学习过程中先阅读一遍思路、浏览一遍动图&#xff0c;之后研究代码&#xff0c;之后仔细体会思路、体会动图。之后再自己进行实现。 一.快排介绍与思想 快速排序相当于一个对冒泡排序的优化&#xff0c;其大体思路是先在文中选取一个…

装机必备——截图工具Snipaste安装教程

装机必备——截图工具Snipaste安装教程 软件下载 软件名称&#xff1a;Snipaste2.7 软件语言&#xff1a;简体中文 软件大小&#xff1a;15.37M 系统要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM2G或更高 下载通…

数据结构(七)查找

2024年5月26日一稿&#xff08;王道P291&#xff09; 7.1 查找的基本概念 7.2 顺序查找和折半查找 7.2.1 顺序查找 7.2.2 折半查找 7.2.3 分块查找 7.3 树形查找 7.3.1 二叉排序树(BST) 7.3.2 平衡二叉树 7.4 B树和B树 7.4.1 B树及其基本操作 7.4.2 B树的基本概念 7.5 散列&…

idea、datagrip注册记录下

一、DataGrip注册 DataGrip版本号&#xff1a;DataGrip 2023.2 访问地址&#xff1a;https://3.jetbra.in/ 点击“hardbin.com”&#xff0c;下载“jetbra.zip” 在vm里面添加上&#xff1a; -javaagent:D:\work\idea\jetbra\ja-netfilter.jarjetbrains重启datagrip 在刚刚…

【408真题】2009-28

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

WebGL技术在教育培训中的应用

WebGL技术在教育培训中的应用非常广泛&#xff0c;通过其强大的三维图形处理能力&#xff0c;能够为教育培训提供更加生动、互动和沉浸式的学习体验。以下是WebGL在教育培训中的几个主要应用及其具体实现。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xf…

奶奶也能看懂的耦合协调度分析

不会计算&#xff1f;跟着文献学起来~ 案例数据连接&#xff08;复制链接后粘贴到浏览器中&#xff09;&#xff1a; 耦合协调度数据​spssau.com/spssaudata.html?shareDataF363000CD033FF15E557BB75B9B0D412 假如你有这样一组数据&#xff1a; 如何进行计算分析耦合协调度…

蓝桥楼赛第30期-Python-第三天赛题 统计学习数据题解

楼赛 第30期 Python 模块大比拼 统计学习数据 介绍 JSON&#xff08;JavaScript Object Notation, /ˈdʒeɪsən/&#xff09;是一种轻量级的数据交换格式&#xff0c;最初是作为 JavaScript 的子集被发明的&#xff0c;但目前已独立于编程语言之外&#xff0c;成为了通用的…

淘宝API探秘:一键获取店铺所有商品的魔法之旅

在数字时代的今天&#xff0c;数据已经成为了商业世界中的魔法石。而对于淘宝店主或者那些想要深入探索淘宝数据的人来说&#xff0c;淘宝API就像是打开阿里巴巴宝藏库的钥匙。今天&#xff0c;我们就来一起探索如何使用淘宝API&#xff0c;特别是如何获取店铺所有商品的接口&a…

ElasticSearch学习篇12_《检索技术核心20讲》基础篇

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243 课程分为基础篇、进阶篇、系统案例篇 主要记录企业课程学习过程课程大纲关键点&#xff0c;以文档形式记录笔记。 内容 检索技术&#xff1a;它是更底层的通用技术&#xff0c…

芝加哥大学最新研究:GPT-4与财务预测,重塑财务分析的未来

最近&#xff0c;芝加哥大学的研究团队发表了一篇突破性的研究&#xff0c;展示了大型语言模型&#xff08;LLM&#xff09;&#xff0c;特别是 OpenAI 开发的 GPT-4&#xff0c;如何在财务报表分析领域取得了与专业分析师相匹配甚至超越的表现。这项研究不仅凸显了人工智能在高…

鸿蒙开发接口图形图像:【WebGL】

WebGL WebGL提供图形绘制的能力&#xff0c;包括对当前绘制图形的位置、颜色等进行处理。 WebGL标准图形API&#xff0c;对应OpenGL ES 2.0特性集。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md…

dp秒杀优惠券

1、全局id生成器 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受单表数据量的限制 场景分析&#xff1a;如果我们的id具有太明显的规则&#xff0c;用户或者…

如何使用 .htaccess 删除文件扩展名

本周有一个客户&#xff0c;购买Hostease的虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何使用 .htaccess 删除文件扩展名&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有…

每日复盘-20240529

20240529 六日涨幅最大: ------1--------300956--------- 英力股份 五日涨幅最大: ------1--------301361--------- 众智科技 四日涨幅最大: ------1--------301361--------- 众智科技 三日涨幅最大: ------1--------300637--------- 扬帆新材 二日涨幅最大: ------1--------30…

HDR视频相关标准-HDR vivid(二)

上文介绍了HDRvivid的一些技术。今天从全局角度来看看HDR视频的处理流程&#xff0c;HDR视频系统&#xff0c;即建立一个比SDR视频更大的色彩/亮度坐标体系&#xff0c;并改变系统的传输函数&#xff0c;以再现更大的色域(WCG)和更高的亮度动态范围。 菁彩 HDR技术的专业术语 …

jmeter多用户并发登录教程

有时候为了模拟更真实的场景&#xff0c;在项目中需要多用户登录操作&#xff0c;大致参考如下 jmx脚本&#xff1a;百度网盘链接 提取码&#xff1a;0000 一&#xff1a; 单用户登录 先使用1个用户登录&#xff08;先把1个请求调试通过&#xff09; 发送一个登录请求&…

19 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 冰后回弹(GIA)改正

19 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 冰后回弹(GIA)改正 0 引言1 gia数据处理过程0 引言 由水量平衡方程可以将地下水储量的计算过程分解为3个部分,第一部分计算陆地水储量变化、第二部分计算地表水储量变化、第三部分计算冰后回弹改正、第四部分计算地下…

【busybox记录】【shell指令】rmdir

目录 内容来源&#xff1a; 【GUN】【rmdir】指令介绍 【busybox】【rmdir】指令介绍 【linux】【rmdir】指令介绍 使用示例&#xff1a; 删除空目录 - 默认 删除dirname下的所有空目录&#xff0c;包括因删除其他目录而变为空的目录 常用组合指令&#xff1a; 指令不…