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

算法打卡day2|数组篇|Leetcode 977.有序数组的平方、 209.长度最小的子数组、59.螺旋矩阵II

 算法题

Leetcode 977.有序数组的平方 

题目链接:  977.有序数组的平方

大佬视频讲解:977.有序数组的平方

个人思路

第一时间就只想到暴力解法,双重循环一个循环比较一个循环赋值;但这样可能会超时,所以还能用双指针,因为这个数组是递增数组,也就是说平方后最大的值只能在两边,那么前后各一个指针,比较其值,再根据大小放进新的数组中就能解决,这也是空间换时间的方法;

解法
暴力解法

循环赋值然后排序;

class Solution {public int[] sortedSquares(int[] nums) {for(int i=0;i<nums.length;i++){//暴力循环求值nums[i]*=nums[i];}Arrays.sort(nums);//排序return nums;}
}

时间复杂度:O(nlog n);(一个for循环为n,再加上排序的nlogn,和为n+nlogn ,取最大的时间复杂度即为nlogn)

空间复杂度:O(1);(没有使用多余空间)

双指针

left指向起始位置,right指向终止位置。定义一个新数组newNums,和A数组一样的大小,根据平方的大小来从数组newNums后往前赋值。

class Solution {public int[] sortedSquares(int[] nums) {int len=nums.length;//数组的长度int left=0; int right=len-1;//双指针int[] newNums=new int[len];//新数组int index=len-1;//新数组赋值的指针while(left<=right){if (nums[left] * nums[left] > nums[right] * nums[right]) {newNums[index]=nums[left]*nums[left];//新数组赋值index--;//新数组指针往前移++left;//起始指针往前移}else{newNums[index]=nums[right]*nums[right];//新数组赋值index--;--right;//结尾指针往后移}}return newNums;}
}

时间复杂度:O(n);(最糟糕的可能就是把数组全遍历一遍,因此为On)

空间复杂度:O(n);(使用多一个数组存值)

Leetcode 209.长度最小的子数组

题目链接:209.长度最小的子数组

大佬视频讲解:209.长度最小的子数组视频讲解

个人思路

一开始又想到暴力解法,但这样明显会超时;然后...就没思路了。(之前刷过好几次滑动窗口还是想不起来,菜得多练呀/无奈)

解法
滑动窗口

滑动窗口就是不断的调节子序列的起始位置和终止位置

其中主要确定如下三点:

  1. 窗口的定义;窗口就是 满足其和 ≥ target  的长度最小的 连续 子数组。
  2. 窗口的起始位置如何移动:如果当前窗口的值大于target 了,窗口就要向前移动了(也就是该缩小了)。
  3. 窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。

如果还是比较抽象建议看看视频209.长度最小的子数组视频讲解

class Solution {public int minSubArrayLen(int target, int[] nums) {//暴力解法,从头开始遍历,计算达到目标值的张最小连续数组即可;这样会超时int start=0;//滑动窗口的起始位置int sum=0;//滑动窗口的和int answer=Integer.MAX_VALUE;//结果数组长度for(int end=0;end<nums.length;end++){//滑动窗口的结束位置sum+=nums[end];while(sum>=target){answer=Math.min(answer,end-start+1);//用当前滑动窗口的长度与之前长度对比sum-=nums[start++];//不断变更start(子序列的起始位置)}}return answer==Integer.MAX_VALUE ? 0:answer;// 如果说明没有符合条件的子序列,即answer没有被赋值的话,就返回0,}
}

时间复杂度:O(n);(一个 for循环加上一个while没有嵌套,所以是n+n,2n)

空间复杂度:O(1);(没有使用多余空间)

Leetcode  59.螺旋矩阵II

题目链接:59.螺旋矩阵II

大佬视频讲解:59.螺旋矩阵II视频讲解

个人思路

这道题之前做过,没怎么搞懂,只记得是找规律,那先画图看看;画一个n为4和5的数组,螺旋循环后发现规律如下:有四个方向赋值;这四个方向的赋值数量刚刚开始都是n-1;如果n为奇数,则会剩下中间的值没有赋值;循环次数正好是n/2;根据这些规律怎么写代码也是个难题,还得多练

解法
找规律

顺时针画矩阵的过程:

  1. 上行;从左到右填充数据
  2. 右列;从上到下填充数据
  3. 下行;从右到左填充数据
  4. 左列:从下到上填充数据

由外向内一圈一圈这么画下去。可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,得按照固定规则来遍历,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。

下面的是按照左闭右开规则

class Solution {public int[][] generateMatrix(int n) {int loop = 0;  // 控制循环次数int start = 0;  // 每次循环的开始点(start, start)int count = 1;  // 定义填充数字int[][] res = new int[n][n];//结果数组int i, j;while (loop++ < n / 2) { // 先判断边界后,再自增1,以此循环(n-loop)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) {//判断n为奇数还是偶数,若为奇数,循环填充后还剩一个中间数没填;res[start][start] = count;}return res;}
}

时间复杂度:O(n^2);(模拟遍历二维矩阵的时间)

空间复杂度:O(1);(没有使用多余空间)

以上是个人的思考反思与总结,若只想根据系列题刷,参考卡哥的网址代码随想录算法官网

相关文章:

算法打卡day2|数组篇|Leetcode 977.有序数组的平方、 209.长度最小的子数组、59.螺旋矩阵II

算法题 Leetcode 977.有序数组的平方 题目链接: 977.有序数组的平方 大佬视频讲解&#xff1a;977.有序数组的平方 个人思路 第一时间就只想到暴力解法&#xff0c;双重循环一个循环比较一个循环赋值&#xff1b;但这样可能会超时&#xff0c;所以还能用双指针&#xff0…...

Hive【内部表、外部表、临时表、分区表、分桶表】【总结】

目录 Hive的物种表结构特性 一、内部表 建表 使用场景 二、外部表 建表:关键词【EXTERNAL】 场景&#xff1a; 外部表与内部表可互相转换 三、临时表 建表 临时表横向对比​编辑 四、分区表 建表&#xff1a;关键字【PARTITIONED BY】 场景&#xff1a; 五、分桶表 …...

随手写的小程序2 一个nc能控制的程序

小程序源代码 下载: https://download.csdn.net/download/nn_84/88846445?spm1001.2014.3001.5501 请下载 Qt 5.12.12 server.pro : QT gui networkCONFIG c11 console CONFIG - app_bundle# You can make your code fail to compile if it uses deprecated APIs. # In o…...

Android中通过属性动画实现文字轮播效果

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、创建一个自定义ProvinceView类,具体代码如下 /*** Author: ly* Date: 2024/2/22* D…...

最长的回文串

开始想的简单了&#xff0c;确实没想到奇数字母删去一个后也能用 解法&#xff1a; 桶排序 #include<iostream> #include<vector> #include<algorithm> using namespace std; #define endl \n #define int long long signed main() {int t;cin >> t…...

2023 H1 中国边缘公有云服务市场 Top2,百度智能云加速推动分布式云智能化升级

近期&#xff0c;IDC 发布了《中国边缘云市场跟踪研究 2023 H1》。报告显示&#xff0c;2023 上半年&#xff0c;中国边缘公有云服务市场规模 24.3 亿元&#xff0c;同比增速达到 41.8%。 其中&#xff0c;百度智能云以 15.7% 的市场份额位列中国边缘公有云服务市场第二&#…...

Emlog博客网站快速搭建并结合内网穿透实现远程访问本地站点

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…...

力扣经典题目解析--旋转图像(字节二面)

题目 原题地址: . - 力扣&#xff08;LeetCode&#xff09; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1…...

【ARMv8M Cortex-M33 系列 8.1 -- RT-Thread 堆内存 检查命令 free 实现及介绍】

文章目录 RT-Thread 堆内存 检查命令 free 实现及介绍rt_memory_info 函数验证 RT-Thread 堆内存 检查命令 free 实现及介绍 在RT-Thread系统中&#xff0c;通常可以通过rt_memory_info函数获取当前的堆内存使用信息&#xff0c;然后你可以包装这个函数来显示剩余的堆空间。rt…...

milvus Delete API流程源码分析

Delete API执行流程源码解析 milvus版本:v2.3.2 整体架构: Delete 的数据流向: 1.客户端sdk发出Delete API请求。 from pymilvus import (connections,Collection, )print("start connecting to Milvus") connections.connect("default", host"192…...

CentOS使用Docker搭建Halo网站并实现无公网ip远程访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…...

【JVM】垃圾回收算法

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 垃圾回收算法 Java是如何实现垃圾回收的呢&#xff1f;简单来说&#xff0c;垃圾回收就做两件事 找到内存中存活的对象释放不在存活对象的内存&…...

如何和将原始request的Header中的值传递给openfeign请求的Header? 以及又如何获取openfeign请求中Header中的值

如何和将原始request的Header中的值传递给openfeign请求的Header&#xff1f; 以及又如何获取openfeign请求中Header中的值 如何和将原始request的Header中的值传递给openfeign请求的Header参考 [https://www.jb51.net/article/282522.htm](https://www.jb51.net/article/28252…...

Flink 侧输出流(SideOutput)

&#x1f338;在平时大部分的 DataStream API 的算子的输出是单一输出&#xff0c;也就是某一种或者说某一类数据流&#xff0c;流向相同的地方。 &#x1f338;在处理不同的流中&#xff0c;除了 split 算子&#xff0c;可以将一条流分成多条流&#xff0c;这些流的数据类型也…...

C语言中关于#include的一些小知识

写代码的过程中&#xff0c;因为手误&#xff0c;重复包含了头文件 可以看到没有报错 如果是你自己编写的头文件&#xff0c;那么如果没加唯一包含标识的话&#xff0c;那么编译器会编译报错的。如果是系统自带的头文件&#xff0c;由于其每个头文件都加了特殊标识&#xff0c…...

DSP芯片 机器码下载方法 【主要 “扯” 用Uniflash下载的方法】

还是以德州仪器的TMS320F28335芯片为 “栗子”&#xff0c;说说这事儿。 编制好的程序经过开发环境可以编译成扩展名为 .out 文件&#xff0c;这个文件就是DSP可以运行机器码&#xff0c;我们把这个文件下载到 DSP芯片中的程序区&#xff0c; 下载好了&#xff0c;这个芯片原…...

速盾网络:CDN用几天关了可以吗?安全吗?

在使用CDN&#xff08;内容分发网络&#xff09;时&#xff0c;有时候会考虑暂时关闭或暂停使用CDN服务的情况。但是&#xff0c;对于关闭CDN服务的时间长短以及安全性问题&#xff0c;很多人可能存在疑问。在本文中&#xff0c;我们将讨论CDN使用中关闭几天是否安全以及相关注…...

MR混合现实情景实训教学系统在高空作业课堂中的应用

高空作业是一项高风险的工作&#xff0c;对于从业者来说&#xff0c;不仅需要具备专业的技能&#xff0c;还需要有丰富的实践经验。然而&#xff0c;传统的课堂教学往往只能通过理论讲解和模拟训练来传授知识&#xff0c;无法提供真实的实践环境。而MR混合现实情景实训教学系统…...

Windows系统中定时执行python脚本

背景&#xff1a;本地Windows系统指定目录下会有文件的修改新增&#xff0c;这些变化的文件需要定时的被上传到git仓库中&#xff0c;这样不需要每次变更手动上传了。 首先编写一个检测文件夹下文件变化并且上传git仓库的python脚本(确保你已经在E:\edc_workspace\data_edc_et…...

HashMap 源码学习-jdk1.8

1、一些常量的定义 这里针对MIN_TREEIFY_CAPACITY 这个值进行解释一下。 java8里面&#xff0c;HashMap 的数据结构是数组 &#xff08;链表或者红黑树&#xff09;&#xff0c;每个数组节点下可能会存在链表和红黑树之间的转换&#xff0c;当同一个索引下面的节点超过8个时…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...