【代码随想录——数组篇】
代码随想录——数组篇
- 2. 二分查找
- 3. 移除元素
- 4. 有序数组的平方
- 5. 长度最小的子数组
- 6. 螺旋矩阵II
2. 二分查找
力扣题目链接
前提:
- 有序数组
- 数组中无重复元素
代码:
(版本一)左闭右闭区间
class Solution {public int search(int[] nums, int target) {//当 target 小于nums的最小值 或 大于nums的最大值时,直接返回-1if(target < nums[0] || target > nums[nums.length - 1])return -1;int left = 0, right = nums.length - 1, mid;while(left <= right) {mid = left + ((right- left) >> 1);if(nums[mid] == target)return mid;else if(nums[mid] > target)right = mid - 1;elseleft = mid + 1;}return -1;}
}
- 时间复杂度:O(log n)
- 空间复杂度:O(1)
(版本二)左闭右开区间
class Solution {public int search(int[] nums, int target) {//当 target 小于nums的最小值 或 大于nums的最大值时,直接返回-1if(target < nums[0] || target > nums[nums.length - 2])return -1;int left = 0, right = nums.length - 1, mid;while(left < right) {mid = left + ((right- left) >> 1);if(nums[mid] == target)return mid;else if(nums[mid] > target)right = mid;elseleft = mid + 1;}return -1;}
}
- 时间复杂度:O(log n)
- 空间复杂度:O(1)
3. 移除元素
力扣题目链接
代码:
双指针法(快慢指针法)
class Solution {public int removeElement(int[] nums, int val) {int j = 0;for(int i = 0; i < nums.length; i++) {if(nums[i] != val) {nums[j++] = nums[i];}} return j;}
}
- 时间复杂度:O(n)
- 空间复杂度:O(1)
4. 有序数组的平方
力扣题目链接
前提:
- 非递减顺序 排序的整数数组
思路:
数组本身有序,平方和较大的值一定出现在两端,可以借用前面学习的双指针法。
代码:
class Solution {public int[] sortedSquares(int[] nums) {int[] result = new int[nums.length];int left = 0, right = nums.length - 1, index = nums.length - 1;while(left <= right) {if(nums[left] * nums[left] < nums[right] * nums[right]) {//大的值从后往前放result[index--] = nums[right] * nums[right];right -= 1;}else {result[index--] = nums[left] * nums[left];left += 1;}}return result;}
}
- 时间复杂度:O(n)
- 空间复杂度:O(n)
5. 长度最小的子数组
力扣题目链接
滑动窗口:
不断调节子序列的起始位置和终止位置,从而得出想要的结果。
滑动窗口三要素:
- 窗口内是什么?
- 满足其和 ≥ target 的长度最小的 连续 子数组。
- 如何移动窗口的起始位置?
- 如果当前窗口的值 ≥ target 了,窗口就要向前移动了(窗口该缩小了)。
- 如何移动窗口的结束位置?
- 窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
代码:
class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0, sum = 0, result = Integer.MAX_VALUE;for (int right = 0; right < nums.length; right++) {sum += nums[right];//如果滑动窗口内的总和大于或等于targetwhile(sum >= target) {//更新最小子序列长度result = Math.min(result, right - left + 1);//移动滑动窗口的起始位置,缩小窗口sum -= nums[left++];}}return result == Integer.MAX_VALUE ? 0 : result;}
}
- 时间复杂度:O(n)
- 空间复杂度:O(1)
6. 螺旋矩阵II
力扣题目链接
代码:
class Solution {public static int[][] generateMatrix(int n) {//定义起始x, y, 偏移量offsetint startX = 0, startY = 0, offset = 1;//定义移动指针i, j, 圈数loop, 数字numint i, j, loop = n >> 1, num = 1;//定义n * n的矩阵int[][] arr = new int[n][n];//模拟循环while((loop--) > 0) {//从左到右(左闭右开)for (j = startY; j < n - offset; j++) {arr[startX][j] = num++;}//从上到下(左闭右开)for (i = startX; i < n - offset; i++) {arr[i][j] = num++;}//从右到左(左闭右开)for ( ; j > startY; j--) {arr[i][j] = num++;}//从下到上(左闭右开)for ( ; i > startX; i--) {arr[i][j] = num++;}//一圈结束,起始位置+1,如(0, 0) 变为(1, 1)startX++;startY++;//offset同步更新offset++;}//如果n为奇数,中间的数单独赋值if(n % 2 == 1)arr[startX][startY] = num;return arr;}
}
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
相关文章:
【代码随想录——数组篇】
代码随想录——数组篇 2. 二分查找3. 移除元素4. 有序数组的平方5. 长度最小的子数组6. 螺旋矩阵II 2. 二分查找 力扣题目链接 前提: 有序数组数组中无重复元素 代码: (版本一)左闭右闭区间 class Solution {public int sea…...
使用 js 类封装项目中音频播放功能的工具方法utils
在前端开发中,音频播放功能是一个常见的需求,我们经常需要在项目中加入音频播放、音频提示等功能。为了提高开发效率和代码复用性,我们可以封装一个工具方法来管理音频播放功能。 在本文中,我将介绍如何封装项目中音频播放功能的…...

【超详细】R语言贝叶斯方法在生态环境领域中的高阶技术应用
查看原文>>>R语言贝叶斯方法在生态环境领域中的高阶技术应用 目录 专题一:前期资料 专题二:R和Rstudio入门和绘图(含ggplot) 专题三:R语言数据清洗-tidyverse包应用 专题四:贝叶斯回归模型-回…...
Python 正则表达式 re . 符号
Python 正则表达式 re . 符号 正文示例1示例2 正文 用法说明:(点号) 在默认模式下,匹配除换行符以外的任意字符。 如果指定了 flags 参数 DOTALL ,它将匹配包括换行符在内的任意字符。 示例1 import restr1 abcde print(re.search(., str…...

智慧监控 高效运维
随着企业IT建设的不断深入和完善,IT管理的重要性逐渐被重视,打通数据割裂,使业务更加充分融合。亟需一套统一的平台来实现跨品牌跨设备类型的集中监控和管理。 LinkSLA带外监控平台,不仅适用于大规模或超大规模的运维场景&#x…...
JAVA每日面试题(一)
Java面试问题及答案 1. 解释Java中的垃圾回收机制和如何优化它 问题: 在Java中,垃圾回收(Garbage Collection, GC)是如何工作的?作为一名Java开发者,你如何优化垃圾回收以提高应用性能? 答案…...

Java数组创建与使用
一.创建和初始化 1.数组是怎么创建的? 直接举例子: int[] arr new int[10]; 这里只简单的举一个int开辟数组的例子。 可见java数组的创建于C语言是不同的。前面是一个int[ ]就是一个数组的数据类型,后面的arr是数组名,最后[…...

EMAP如何建数据源
新建数据源: EMAP底座的数据源,名称为“DB_EMAP_BIZ_BASE",不可随意更改. 新建业务系统数据源,名称为”DB_STUDY_BIZ_BASE". 支持的数据库: 支持两种类型数据库:H2 和 oracle 新建H2数据源&am…...

在 Linux 中创建文件
目录 ⛳️推荐 前言 使用 touch 命令创建一个新的空文件 使用 echo 命令创建一个新文件 使用 cat 命令创建新文件 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到…...
高德地图+HTML+点击事件+自定心信息窗体
代码如下 <!doctype html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"initial-scale1.0, user-scalableno, width…...
流畅的python-学习笔记_协议+继承优缺点
接口和协议 python动态语言,没有interface等概念,接口和协议方法有的也有替代品,所以类似于鸭子类型,只关注行为像鸭子,不关注它是不是鸭子。不是每个接口都得实现,这是允许的 猴子补丁 可动态给对象添加…...

哪个文件加密软件好?迅软加密软件特性解析
哪个文件加密软件好? 这里推荐一款好用的文件加密软件,迅软DSE加密软件,有17年的加密经验了,已为三十万企业解决信息安全问题。简单易用,兼容性强,各类型文件都可加密。完善的售后保障,各地有服…...
Ubuntu 根目录扩容
环境 物理机:MacBook Air M2 Sonoma 14.4.1 虚拟机:VMware Fusion Player 13.5.0 镜像:Jammy Desktop ARM64 步骤 删除所有快照,关闭镜像,在 vm 上找到该镜像的硬盘设置,进行扩容; 开启镜像&am…...

人证比对API接口如何对接
人证比对API接口全称叫人脸身份证比对API接口也叫人脸实名认证API接口、实人认证API接口,指的是输入姓名、身份证号码和头像照片,与公安库身份证头像进行权威比对,返回比较结果。那么人脸身份证比对API接口该如何对接呢? 首先我们…...

NIO(非阻塞I/O)和IO(阻塞I/O)详解
文章目录 一、NIO(Non-blocking I/O,非阻塞I/O)1、Channel(通道)2、Buffer(缓冲区)1、ByteBuffer 读取文件2、ByteBuffer 的常用方法2、ByteBuffer 的结构详解3、ByteBuffer 与字符串互转4、Sca…...
【网络】传输层的特点总结
1传输层协议 传输层主要有两个常见的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP 提供可靠的、面向连接的通信服务,适用于对数据传输可靠性要求高的场景,如网页浏览、文件传输等。而 UD…...

Scala 多版本下载指南
Scala,这一功能丰富的编程语言,结合了面向对象和函数式编程的精华,为开发者提供了强大的工具来构建高效、可扩展的应用程序。随着Scala社区的不断壮大和技术的演进,多个版本的Scala被广泛应用于不同的项目与场景中。本文旨在为您提…...

已经安装tensorflow,仍报错No module named ‘tensorflow‘
在安装某些python虚拟环境的教程文章中,经常看到有评论区说安装了但是调用显示无模块,例如pytorch和tensorflow等等。 其实跟之前我写过的一篇文章解决方法类似,就是python项目中需要应用哪个虚拟环境,这个项目的python解释器就选…...

五一 作业
#include <iostream>using namespace std; class Num { private:int a; public:Num() {}Num(int a):a(a){}//设置a的值void set(int a){this->aa;}//1-a的和void Sum(){if(a<1){cout<<"a<1"<<endl;return;}int sum0;for(int i1;i<a;i)…...
TesseractOCR安装及使用
1. 基本概念 1.1 Tesseract Tesseract 是一款基于 C 语言开发并开源的光学识别工具,提供底层的文字识别能力。 1.2 Tess4J Tess4J 是对 Tesseract OCR API 的 Java 封装,有了 Tess4J 之后 Java 就可以直接调用本地安装的 Tesseract 进行文字识别。 …...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...