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

想要精通算法和SQL的成长之路 - 连续的子数组和

想要精通算法和SQL的成长之路 - 连续的子数组和

  • 前言
  • 一. 连续的子数组和
    • 1.1 最原始的前缀和
    • 1.2 前缀和 + 哈希表

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 连续的子数组和

原题链接
在这里插入图片描述

1.1 最原始的前缀和

如果这道题目,用前缀和来算,我们的思路一般是这样:

  1. 计算这个数组的前缀和。
  2. 循环遍历数组的每个元素,以每个元素作为起点,向后寻找第二个元素(索引至少是起点+2)作为终点,计算两者的区域和。再判断是否满足条件。

那么这样的代码写出来就是这样:

public boolean checkSubarraySum(int[] nums, int k) {int n = nums.length;// 计算前缀和int[] preSum = new int[n + 1];for (int i = 0; i < n; i++) {preSum[i + 1] = preSum[i] + nums[i];}// i 遍历到 preSum。length -2 即可,for (int i = 0; i < n - 1; i++) {// 区间长度 > 2for (int j = i + 2; j <= n; j++) {// 前缀和差即是[i,j]之间的区域和int diff = preSum[j] - preSum[i];if (diff % k == 0) {return true;}}}return false;
}

结果如下:
在这里插入图片描述

1.2 前缀和 + 哈希表

我们从这段代码入手:

int diff = preSum[j] - preSum[i];
if (diff % k == 0) {return true;
}

即:

  • (preSum[j] - preSum[i] ) % k = 0;
  • preSum[j] % k == preSum[i] % k;

那么我们只需要利用哈希表,记录每个前缀和对于k的一个取模值是多少即可,1. 存储的是它们的下标。
2. 如果遇到取模值相同的,并且两个下标差 > 2,就满足条件。

那么代码优化:

public boolean checkSubarraySum(int[] nums, int k) {int n = nums.length;// 计算前缀和int[] preSum = new int[n + 1];for (int i = 0; i < n; i++) {preSum[i + 1] = preSum[i] + nums[i];}HashSet<Integer> set = new HashSet<>();for (int i = 2; i <= n; i++) {set.add(preSum[i - 2] % k);if (set.contains(preSum[i] % k)) {return true;}}return false;
}
http://www.lryc.cn/news/195037.html

相关文章:

  • 【C++】头文件chrono
  • Python学习六
  • Springboot 集成 WebSocket
  • 谨以此篇,纪念我2023年曲折的计算机保研之路
  • VSS、VDD、VBAT、VSSA
  • 【Rust基础③】方法method、泛型与特征
  • 48.排列问题求解
  • 18.(开发工具篇Gitlab)Git如何回退到指定版本
  • IDEA初始配置
  • WM_COPYDATA传回返回值的一个方案
  • 【日常业务开发】接口性能优化
  • Android 10.0 禁止弹出系统simlock的锁卡弹窗功能实现
  • VulnHub lazysysadmin
  • ppt怎么压缩到10m以内?分享ppt缩小方法
  • 智能警用装备管理系统-科技赋能警务
  • 攻防千层饼
  • 组件封装使用?
  • 2.3 初探Hadoop世界
  • Flutter笔记:发布一个电商中文货币显示插件Money Display
  • 解密zkLogin:探索前沿的Sui身份验证解决方案
  • js构造函数
  • 性能测试-redis常见问题
  • 预测:2024 年将是互联网永远改变的一年。
  • Vue2 与 React 的区别
  • 【AI视野·今日Robot 机器人论文速览 第五十一期】Tue, 10 Oct 2023
  • 零经验想跳槽转行网络安全,需要准备什么?
  • Rust-是否使用Rc<T>
  • 论文解析——一种面向Chiplet互连的高效传输协议设计与实现
  • svo2.0 svo pro 编译运行
  • 微信小程序前端生成动态海报图