代码随想录刷题笔记(DAY2)

今日总结:今天在学 vue 做项目,学校还有很多作业要完成,熬到现在写完了三道题,有点太晚了,最后一道题的题解明天早起补上。

Day 2

01. 有序数组的平方(No. 977)

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

1.1 笔记

这道题我一开始是准备使用比较器根据绝对值排序来实现的,但是 Comparator<Integer> 是无法作用于 int[] 的,小小踩坑

然后回想起昨天的双指针思想,这道题可以通过两个分别指向负数和正数的,因为是非递减排序的,所以负数是按照绝对值非递增排序的,也就是前一个负数的绝对值一定大于后一个负数的绝对值,平方也同理。

所以不妨设置一个新数组来存储这些元素,利用 left 指针去遍历小于零的元素,right 指针去遍历大于零的元素,当遍历结束后(如果有)剩余的元素,也就是正数和负数个数不相等的情况,就按照绝对值的顺序继续放入新数组。

1.2 代码

class Solution {public int[] sortedSquares(int[] nums) {int left = 0;int right = nums.length - 1;int[] resArr = new int[nums.length]; // 存储结果的新数组int index = resArr.length - 1; // 从后往前循环赋值新数组// 正数组直接返回结果if (nums[left] >= 0) {for (int i = 0; i < nums.length; i++) {nums[i] = nums[i] * nums[i];}return nums;}// left 索引负数部分,right 索引整数部分while (nums[left] < 0 && nums[right] >= 0) {if (Math.abs(nums[left]) > nums[right]) {resArr[index] = nums[left] * nums[left];index--;left++;} else if (Math.abs(nums[left]) < nums[right]) {resArr[index] = nums[right] * nums[right];index--;right--;} else {// 相等的情况,赋值两次resArr[index] = nums[left] * nums[left];index--;resArr[index] = nums[left] * nums[left];index--;left++;right--;}}if (nums[left] >= 0) {// 负数部分已经遍历完,处理正数部分for (int i = index; i >= 0; i--) {resArr[i] = nums[right] * nums[right];right--;}} else if (nums[right] < 0) {// 说明正数部分已经遍历完了for (int i = index; i >= 0; i--) {resArr[i] = nums[left] * nums[left];left++;}}return resArr;}
}

02. 长度最小的子数组(No. 209)

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0

示例 1:

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

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

2.1 笔记

这道题采用的是滚动数组的方法,所谓滚动数组就是不断的调节子序列的起始和终止的位置,从而得出我们想要的结果,首先要考虑的是我们遍历的是数组的起始位置还是终止位置,如果遍历的是起始位置的话那终止位置该如何确定?通过 for 循环继续向后遍历,来确定以每个元素为起始元素所得到的所有的子数组,这样就是暴力解法,显然时间复杂度是不符合题目要求的。

所以我们采用 for 循环遍历终止位置,那要考虑的就是,我们的起始位置该什么时候更新呢?很明显,当我们循环遍历直到这个数组的 sum 和大于等于题目中的 target 起始位置向后移动缩小范围,这样就避免了暴力解法中我们每到一个起始位置都要从头开始加和:通过起始位置的向后递增,这时候我们的 sum 应该等于原本的 sum 减去每次的 nums[i] **直到 **我们发现 sum < target 就再去更新终止位置的值,这样就实现了数组滚动前进的效果,遍历以 nums 中的每个元素作为结尾的所有子数组。

2.2 代码
class Solution {public int minSubArrayLen(int target, int[] nums) {int i = 0; // 起点int minLen = Integer.MAX_VALUE;int sum = 0;for (int j = 0; j < nums.length; j++) {// 外层去循环遍历滑动窗口的终点,起点在找到符合的区间再更新sum += nums[j];// 一直使起始位置向后移动直到 sum < target 为止while (sum >= target) {// 更新最短的值minLen = Math.min(minLen, (j - i + 1));// 移动起始位置sum -= nums[i];i++;}}return minLen == Integer.MAX_VALUE ? 0 : minLen;}
}

03. 螺旋矩阵 II(No. 59)

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

示例 1:

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

示例 2:

输入:n = 1
输出:[[1]]

3.1 笔记
3.2 代码
class Solution {public int[][] generateMatrix(int n) {int index = 0;int loop = 0; // 控制循环次数,总共需要遍历 n / 2 次// n 阶矩阵int[][] res = new int[n][n];int start = 0;int i, j; // 因为遍历另一条边的时候需要前一条边的结束位置,需要保存int count = 1; // 这是每次填充的数字while(loop++ < n / 2) {for (j = start; j < n - loop; j++) {// 区间是左闭右开的不遍历最后一个元素res[start][j] = count++;}for (i = start; i < n - loop; i++) {res[i][j] = count++;}for (; j >= loop; j--) {res[i][j] = count++;}for (; i >= loop; i--) {res[i][j] = count++;}start++;}if (n % 2 == 1) {res[start][start] = count;}return res;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

SSL VPN移动安全接入策略

一、登陆策略 1、需求背景&#xff08;【系统设置】-【系统选项】&#xff09; 需求&#xff1a; &#xff08;1&#xff09;接入端口可以自定义且支持HTTP 端口跳转到HTTPS端口 &#xff08;2&#xff09;登录页面自持自定义背景、logo等 &#xff08;3&#xff09;登…

Python入门-字符串Str

字符串 字符串 是Python中的 不可变 数据类型 1.字符串相关处理方法 大小写转换 # 大小写转换 s1HelloWorld new_s2s1.lower() print(s1,new_s2)new_s3s1.upper() print(new_s3)结果&#xff1a; D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap6\示例6-1字符…

Android Studio实现课表

本文章主要展示课表的实现&#xff0c;里面包含很多控件的用法&#xff0c;比如吐司Toast、通知Notification、ListView&#xff0c;数值选择器NumberPicker&#xff0c;SeekBar同editText的关联。抽屉导航栏 还有一些其他的功能&#xff0c;比如InputFilter自定义的字符过滤器…

华为云CCE-集群内访问-根据ip访问同个pod

华为云CCE-集群内访问-根据ip访问同个pod 问题描述&#xff1a;架构如下&#xff1a;解决方法&#xff1a; 问题描述&#xff1a; 使用service集群内访问时&#xff0c;由于启用了两个pod&#xff0c;导致请求轮询在两个pod之间&#xff0c;无法返回正确的结果。 架构如下&am…

【CISSP学习笔记】6. 安全开发

该知识领域涉及如下考点&#xff0c;具体内容分布于如下各个子章节&#xff1a; 理解安全并将其融入软件开发生命周期 (SDLC) 中在软件开发环境中识别和应用安全控制评估软件安全的有效性评估获得软件对安全的影响定义并应用安全编码准则和标准 6.1. 系统开发控制 6.1.1. 软…

uniapp的css样式图片大小截图展示

目录 截取图片前截取图片后第一种方式&#xff1a;代码第二种方式&#xff1a;代码最后 截取图片前 截取图片后 第一种方式&#xff1a;代码 <view class"swiper-box-img"><image class"swiper-box-img-img" :src"item.file_path" mod…

计算机毕业设计 基于SpringBoot的高校危化试剂仓储管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

JVM工作原理与实战(一):初识JVM

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JVM概念 二、JVM的三大核心功能 1.内存管理 2.解释执行虚拟机指令 3.即时编译 三、常见的JVM虚拟机 1.HotSpot 2.GraalVM 3.Dragonwell JDK 龙井 4.Eclipse OpenJ9 总结 …

数据仓库-数仓优化小厂实践

一、背景 由于公司规模较小&#xff0c;大数据相关没有实现平台化&#xff0c;相关的架构都是原生的Apache组件&#xff0c;所以集群的维护和优化都需要人工的参与。根据自己的实践整理一些数仓相关的优化。 二、优化 1、简易架构图 2、ODS层优化 2.1 分段式解析 随着业务增长…

【XR806开发板试用】XR806串口驱动CM32M对小厨宝的控制实验

一.说明 非常感谢基于安谋科技STAR-MC1的全志XR806 Wi-FiBLE开源鸿蒙开发板试用活动,并获得开发板试用。 XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片&#xff0c;支持OpenHarmony minisystem和FreeRTOS&#xff0c;具有集成度高、…

2013年第二届数学建模国际赛小美赛B题寄居蟹进化出人类的就业模式解题全过程文档及程序

2013年第二届数学建模国际赛小美赛 B题 寄居蟹进化出人类的就业模式 原题再现&#xff1a; 寄居蟹是美国最受欢迎的宠物品种&#xff0c;依靠其他动物的壳来保护。剥去寄居蟹的壳&#xff0c;你会看到它柔软、粉红色的腹部卷曲在头状的蕨类叶子后面。大多数寄居蟹喜欢蜗牛壳&…

每日一题:LeetCode-LCR 179. 查找总价格为目标值的两个商品

每日一题系列&#xff08;day 16&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

NodeJs 第四章 net、http、https 模块

net、http、https 模块 netnet 模块是什么net 模块能干些什么net 模块如何创建服务器net 模块如何创建客户端 http如何发送一个http请求如何创建 http 服务 https如何获取 SSL 证书如何创建一个 https 服务 net net 模块是什么 net 模块异步网络 API&#xff0c;用于创建基于…

MongoDB主从复制,一文打尽!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

Spring Boot学习随笔- Jasypt加密数据库用户名和密码以及解密

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十九章、Jasypt加密 Jasypt全称是Java Simplified Encryption&#xff0c;是一个开源项目。 Jasypt与Spring Boot集成&#xff0c;以便在应用程序的属性文件中加密敏感信息&#xff0c;然后在应用程序运行…

mac下jd-gui提示没有找到合适的jdk版本

mac下jd-gui提示jdk有问题 背景解决看一下是不是真有问题了方法一&#xff1a;修改启动脚本方法二&#xff1a;设置launchd环境变量 扩展动态切jdk脚本(.bash_profile) 背景 配置了动态jdk后&#xff0c;再次使用JD-GUI提示没有找到合适的jdk版本。 解决 看一下是不是真有问题…

《数据结构、算法与应用C++语言描述》- 平衡搜索树 -全网唯一完整详细实现插入和删除操作的模板类

平衡搜索树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_34Balanced search tree 概述 本章会讲AVL、红-黑树、分裂树、B-树。 平衡搜索树的应用&#xff1f; AVL 和红-黑树和分裂树适合内部存储的应用。 B-树适合外部存储的…

gzip引入后node_modules中.cache compression-webpack-plugin占用内存过多

1.Gzip Gzip&#xff08;GNU zip&#xff09;是一种常见的文件压缩格式和压缩算法&#xff0c;通常用于在 Web 服务器上对静态资源文件进行压缩&#xff0c;以减小文件大小并加快文件传输速度。在前端开发中&#xff0c;经常会使用 Gzip 压缩来优化网站的性能。 Gzip 压缩通过…

云计算:OpenStack 配置云主机实例的资源实现内网互通

目录 一、实验 1. 环境 2.配置项目及用户 3.配置规格实例与镜像 4.配置VPC 5. 配置安全组 6. 创建云主机 cs_01 &#xff08;cirros系统&#xff09; 7.创建云主机 cs_02 &#xff08;cirros系统&#xff09; 8.创建云主机 cs_03 &#xff08;cirros系统&#xff09; …