Leetcode 560. 和为 K 的子数组和Leetcode 189. 轮转数组

server/2024/10/18 22:34:41/

文章目录

  • Leetcode 560. 和为 K 的子数组
    • 题目描述
    • C语言题解和思路
      • 解题思路
  • Leetcode 189. 轮转数组
    • 题目描述
    • C语言题解和思路
      • 解题思路


Leetcode 560. 和为 K 的子数组

题目描述

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。

子数组是数组中元素的连续非空序列。

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

提示:

  • 1 <= nums.length <= 2 * 10 ^ 4
  • -1000 <= nums[i] <= 1000
  • -10 ^ 7 <= k <= 10 ^ 7

C语言题解和思路

int subarraySum(int* nums, int numsSize, int k) {int ret = 0, sum = 0;int i = 0, j = 0;int a = 10000000;int hash[20000000] = {0};hash[0 + a] = 1;for(i = 0; i < numsSize; i++){sum += nums[i];if(hash[sum + a - k] != 0){ret += hash[sum - k + a];}hash[sum + a]++;}return ret;
}

解题思路

哈希表 + 前缀和:
如果数组前 i 个值的和与数组前 j 个值的和的差等于 k ,说明下标 i-1 到 j-1 的子数组的和为 k 。

定义一个有2*10^7的数组作为哈希表,并初始化为0。

定义变量 a 并声明为 10^7 ,因为 k 的值包含负数,而数组的下标从 0 开始,所以设置将 a 的值作为数字 0 的位置。

将数字 0 的位置赋值 1 ,表示当子数组的和等于 k 后使返回值加的量。

遍历数组,让变量 sum 加上各个下标的值,判断 sum 与 k 的差的位置是否为 0 ,如果不为 0 ,让返回值加上哈希表上该位置的值;判断完后让哈希表 sum 上的值加 1 。

遍历完后,返回 ret 。

Leetcode 189. 轮转数组

题目描述

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

提示:

  • 1 <= nums.length <= 10^5
  • -2 ^ 31 <= nums[i] <= 2 ^ 31 - 1
  • 0 <= k <= 10^5

进阶:

尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?

C语言题解和思路

void rotate(int* nums, int numsSize, int k) {k = k % numsSize;int *tmp = (int *)malloc(sizeof(int) * (k + 1));int i, j = 0, c;for(i = numsSize - k; i < numsSize; i++){tmp[j++] = nums[i];}j = numsSize - 1;for(i = numsSize - k - 1; i >= 0; i--){nums[j--] = nums[i];}for(i = 0; i < k; i++){nums[i] = tmp[i];}
}

解题思路

如果 k 大于数组的长度,需要取 k 除以数组长度的余数,否则会重复轮转。

将数组后 k 个元素保存在一个临时数组中,将原数组 nums 的元素往后挪 k 位。

再将临时数组中的数转移回原数组的前 k 位。


http://www.ppmy.cn/server/5630.html

相关文章

计算机视觉——OpenCV Python位运算与图像掩码

概述 位运算与图像掩码的结合允许对图像的特定区域进行精确的操作。通过使用位运算&#xff08;如AND、OR、XOR和NOT&#xff09;&#xff0c;可以基于掩码的选择性地修改图像数据。位运算与图像掩码结合使用的一些关键点和应用场景&#xff1a; 选择性修改&#xff1a; 通过位…

【后端】Thymeleaf模板引擎学习笔记

文章目录 1. java体系模板引擎介绍2. 使用2.1 初步使用 视频地址 1. java体系模板引擎介绍 FreeMarkerThymeleafVelocity 2. 使用 2.1 初步使用 引入依赖 <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf</artifactId><…

C++知识点总结(30):递归进阶练习

递归进阶练习 一、 2 2 2 的幂数1. 审题2. 参考答案2.1 递归2.2 循环 二、汉诺塔移动次数1. 审题2. 思路3. 参考答案 三、数字乘积分解1. 审题2. 参考答案 四、数字重复分解1. 审题2. 参考答案 五、烤鸡调料1. 审题2. 参考答案 一、 2 2 2 的幂数 1. 审题 如果这个整数是由若…

Sublime Text下载,安装,安装插件管理器,下载汉化插件

SublimeTest官网 © Sublime Text中文网 下载安装 一路点击安装即可 安装插件管理器 管理器官网安装 - 包控制 (packagecontrol.io) 手动安装将3 位置点击网址下载 再打开SublimeTest 点击 选择第一个Browse Packages..... 将会跳转到文件夹中 进入上一个文件夹 在进入…

vscode设置conda默认python环境,简单有效

本地conda 可能安装了各种环境&#xff0c;默认的vscode总是base环境&#xff0c;这时你想要在vscode调试python代码&#xff0c;使用默认的环境没有安装对应的包就会遇到报错解决这个问题的方法很简单ctrlshiftp 调出命令面板 再输入 select interpreter , 选择 python 选择解…

linux——Bash特性

bash是一个命令解释器&#xff0c;其支持命令行展开&#xff5b;&#xff5d;写法 alias是命令别称&#xff0c;即为命令等同于&#xff0c;使用unalias对应命令可以取消该别称 alias可以对命令进行更改

react15升级17问题记录

,当前旧项目主要依赖版本介绍&#xff1a;这里只贴出重要依赖包的旧版本做展示&#xff0c;可以看到版本都相当落后了&#xff0c;升级的话会涉及一些API以及依赖的修改或者弃用 次文章只记录当前项目使用&#xff0c;其他项目不一定通用 {"react": "^15.6.1&q…

基于OKHttp的大文件下载

1.需求&#xff1a; 根据Url下载大文件&#xff0c;本地创建文件&#xff0c;从输入流读取并写入文件&#xff0c;要求能满足大文件的下载&#xff0c;不能出现OOM 2.引入依赖 <!-- OK HTTP --> <dependency><groupId>com.squareup.okhttp3</groupId>…