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

推荐网站建设的书/百度营销网页版

推荐网站建设的书,百度营销网页版,江苏网站开发建设多少钱,jsp网站建立题目 209.长度最小的子数组 题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。 力扣题目链接(opens new window) 给定一个含有 n 个正整数的数组和一个正整数 s &am…

题目

209.长度最小的子数组

题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。

力扣题目链接(opens new window)

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

示例:

  • 输入:s = 7, nums = [2,3,1,2,4,3]
  • 输出:2
  • 解释:子数组 [4,3] 是该条件下的长度最小的子数组。

提示:

  • 1 <= target <= 10^9
  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^5

视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili

59.螺旋矩阵II

题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。

力扣题目链接(opens new window)

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili

区间和

前缀和是一种思维巧妙很实用 而且 很有容易理解的一种算法思想,大家可以体会一下

题目链接(opens new window)

题目描述

给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。

输入描述

第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间,直至文件结束。

输出描述

输出每个指定区间内元素的总和。

输入示例

5
1
2
3
4
5
0 1
1 3

输出示例

3
9

数据范围:

0 < n <= 100000

开发商购买土地

#TODO,少这道题,明天补

代码

public class Array2 {/*** 寻找满足其和 ≥ s 的长度最小的子数组* 时间复杂度:O(n),空间复杂度:O(1)* * @param s 目标和* @param nums 输入数组* @return 满足条件的最小子数组长度,如果不存在则返回0*/public static int minSubArrayLen(int s, int[] nums) {int left = 0;                  // 滑动窗口左边界int sum = 0;                   // 当前窗口内的元素和int minLength = Integer.MAX_VALUE;  // 最小子数组长度,初始化为最大整数值int n = nums.length;           // 数组长度// 右指针遍历整个数组for (int right = 0; right < n; right++) {sum += nums[right];        // 将当前元素加入窗口// 当窗口内元素和大于等于目标值时,尝试缩小窗口while (sum >= s) {int subLength = right - left + 1;  // 计算当前窗口长度minLength = Math.min(minLength, subLength);  // 更新最小长度sum -= nums[left];     // 移除窗口最左侧元素left++;                // 左指针右移}}// 如果minLength仍为初始值,说明没有找到满足条件的子数组return minLength == Integer.MAX_VALUE ? 0 : minLength;}/*** 生成螺旋矩阵* 按照顺时针螺旋顺序填充1到n²的元素到n×n矩阵中* 时间复杂度:O(n²),空间复杂度:O(n²)* * @param n 矩阵大小* @return 生成的n×n螺旋矩阵*/public static int[][] generateMatrix(int n) {// 创建n×n的二维数组用于存储结果int[][] nums = new int[n][n];// 定义每一圈的起始坐标点int startX = 0, startY = 0;  // startX表示行起点,startY表示列起点// offset用于控制每一条边遍历的长度,初始值为1是因为左闭右开的遍历方式int offset = 1;// count表示当前要填入矩阵的数字,从1开始递增int count = 1;  // 矩阵中需要填写的数字// loop表示当前遍历的圈数,从最外圈开始int loop = 1; // 记录当前的圈数// i和j用于在循环中表示当前的行和列索引int i, j; // j 代表列, i 代表行;// 对于n×n的矩阵,最多有n/2个完整的圈// 例如:3×3矩阵有1个完整圈,4×4矩阵有2个完整圈while (loop <= n / 2) {// 每一圈的遍历分为四个步骤:上边、右边、下边、左边// 步骤1:从左到右遍历上边// 左闭右开区间[startY, n-offset),即不包含最右侧的元素for (j = startY; j < n - offset; j++) {nums[startX][j] = count++; // 填充数字并递增}// 步骤2:从上到下遍历右边// 左闭右开区间[startX, n-offset),即不包含最下侧的元素for (i = startX; i < n - offset; i++) {nums[i][j] = count++; // 注意此时j已经是上一个循环结束的值}// 步骤3:从右到左遍历下边// 左闭右开区间(startY, j],即不包含最左侧的元素for (; j > startY; j--) {nums[i][j] = count++; // 注意此时i已经是上一个循环结束的值}// 步骤4:从下到上遍历左边// 左闭右开区间(startX, i],即不包含最上侧的元素for (; i > startX; i--) {nums[i][j] = count++; // 注意此时j已经是上一个循环结束的值}// 完成一圈的遍历后,更新下一圈的起始点和参数startX++; // 行起点向下移动一位startY++; // 列起点向右移动一位offset++; // 偏移量增加,使得下一圈的边长减少loop++;   // 圈数增加}// 特殊情况处理:当n为奇数时,矩阵中心位置需要单独赋值if (n % 2 == 1) { // n 为奇数时,单独处理矩阵中心的值nums[startX][startY] = count; // 此时startX和startY正好指向矩阵中心}return nums; // 返回填充完成的螺旋矩阵}/*** 计算指定区间内元素的总和* 使用前缀和优化区间查询* 时间复杂度:预处理O(n),每次查询O(1)* 空间复杂度:O(n)* * @param arr 输入数组* @param queries 查询区间数组,每个查询是一个长度为2的数组,表示[left, right]* @return 每个查询区间的元素总和*/public static int[] rangeSum(int[] arr, int[][] queries) {int n = arr.length;int q = queries.length;// 计算前缀和数组// prefixSum[i]表示arr[0]到arr[i-1]的和int[] prefixSum = new int[n + 1];for (int i = 0; i < n; i++) {prefixSum[i + 1] = prefixSum[i] + arr[i];}// 计算每个查询区间的和int[] results = new int[q];for (int i = 0; i < q; i++) {int left = queries[i][0];int right = queries[i][1];// 区间和 = prefixSum[right+1] - prefixSum[left]results[i] = prefixSum[right + 1] - prefixSum[left];}return results;}/*** 打印矩阵* * @param matrix 要打印的矩阵*/public static void printMatrix(int[][] matrix) {System.out.println("[");for (int i = 0; i < matrix.length; i++) {System.out.print("  [");for (int j = 0; j < matrix[0].length; j++) {System.out.print(matrix[i][j]);if (j < matrix[0].length - 1) {System.out.print(", ");}}System.out.print("]");if (i < matrix.length - 1) {System.out.println(",");} else {System.out.println();}}System.out.println("]");}public static void main(String[] args) {// 测试最小子数组长度int[] arr = {2, 3, 1, 2, 4, 3};int s = 7;System.out.println("最小子数组长度: " + minSubArrayLen(s, arr));// 测试螺旋矩阵System.out.println("\n生成3×3螺旋矩阵:");int[][] spiralMatrix = generateMatrix(3);printMatrix(spiralMatrix);System.out.println("\n生成4×4螺旋矩阵:");spiralMatrix = generateMatrix(4);printMatrix(spiralMatrix);// 测试区间求和System.out.println("\n测试区间求和:");int[] testArr = {1, 2, 3, 4, 5};int[][] queries = {{0, 1}, {1, 3}, {0, 4}};System.out.println("原始数组: ");for (int num : testArr) {System.out.print(num + " ");}System.out.println();int[] sums = rangeSum(testArr, queries);System.out.println("区间查询结果:");for (int i = 0; i < queries.length; i++) {System.out.println("区间 [" + queries[i][0] + ", " + queries[i][1] + "] 的和: " + sums[i]);}}
}

http://www.whsansanxincailiao.cn/news/30342468.html

相关文章:

  • html5 图片展示网站/重庆百度搜索优化
  • 如何用群晖做自己的网站/信息流优化师前景
  • 网站报价表怎么做/网站软件下载
  • 志愿者协会网站建设/北京网站优化排名推广
  • 网站正在建设中英文表述/seo优化 搜 盈seo公司
  • 如何去注册一个公司/优化网站排名的方法
  • 承德企业网站建设/seo整体优化步骤怎么写
  • 海外免备案网站/自己做网站如何赚钱
  • 邹城网站建设哪家便宜/百度 营销中心
  • 青岛建设教育网站/哪有免费的网站
  • 网站管理系统模板/接外包网站
  • 新余哪有做网站的公司/一份完整的市场调查方案
  • 韩国做暖暖网站/网络媒体推广报价
  • 学校网络建设情况说明/seo详细教程
  • 做网站需要哪几个板块/百度关键词竞价价格
  • 网站推广自己可以做吗/打广告去哪个平台
  • 局域网建设网站如何访问/站点搜索
  • 蚌埠专业制作网站的公司/百度关键词搜索次数
  • 上市企业网站建设/智能网站排名优化
  • 百度为什么不收录网站的某个版块/杭州网站优化推荐
  • 微信支付申请网站建设未完成/新闻式软文
  • 站酷网官网登录/外贸接单平台哪个最好
  • 南昌网站建设_南昌做网站公司/网站制作软件
  • 宝鸡百度seo/安卓aso关键词优化
  • 网络营销运营推广方案下载/聊城seo整站优化报价
  • 湖南微信网站公司简介/黑龙江新闻头条最新消息
  • 溧阳网站建设中心/黄页推广2021
  • 网站开发项目业务要求/谁能给我个网址
  • 公司网站建设多少费用哪里济南兴田德润有活动吗/河南网站优化公司
  • 网站做投票系统/全自动推广引流软件免费