算法笔记——数组篇

news2024/12/29 10:35:21

整理一下刷过的题型,持续更新,参照代码随想录

代码随想录数组篇

在这里插入图片描述

二分法

力扣相关题目:

704. 二分查找

只适用于排序有序数组,且没有重复元素。主要是有两种写法,二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。例如到底是 while(left < right) 还是 while(left <= right),到底是right = middle呢,还是要right = middle - 1呢?

1.左闭右闭
while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=
if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1

class Solution {
    public int search(int[] nums, int target) {
        // 避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算
        if (target < nums[0] || target > nums[nums.length - 1]) {
            return -1;
        }
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target)
                return mid;
            else if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid - 1;
        }
        return -1;
    }
}

2.左闭右开
while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的
if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]

class Solution {
    public int search(int[] nums, int target) {
        int left = 0, right = nums.length;
        while (left < right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target)
                return mid;
            else if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid;
        }
        return -1;
    }
}

双指针法

力扣题目:

27. 移除元素

双指针法太常用了,最经典的方法。后面有单独的章节来讲

滑动窗口法

力扣题目:

209.长度最小的子数组

这道题目用暴力方法即两个for循环复杂度太高,所以采用滑动窗口的方法一遍过,for循环的索引表示窗口的结束位置,然后不断调整起始位置。

class Solution {

    // 滑动窗口
    public int minSubArrayLen(int s, int[] nums) {
        int left = 0; // 窗口起始位置
        int sum = 0;
        int result = Integer.MAX_VALUE;
        for (int right = 0; right < nums.length; right++) {
            sum += nums[right];
            while (sum >= s) {
                result = Math.min(result, right - left + 1);// 比较最小结果
                sum -= nums[left++]; // 重点,找到满足要求的sum后,开始把窗口起始位置前移
            }
        }
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}

模拟

力扣题目:

59. 螺旋矩阵 II

此类题目没有什么技巧,,考验代码硬实力,往往边界问题比较多,比较烦人。

class Solution {
    public int[][] generateMatrix(int n) {
int a =1;
int[][] result =new int[n][n];
int num=n-1;//第一次打印n-1个,以后每次减钞2
int start =0;
while(num>0){
//打印上边那行
for (int i=start;i<start+num;i++){
result[start][i]=a++;}
//打印右边那行
for (int i=start;i<start+num;i++){
result[i][start+num]=a++;}
//打印下边那行
for (int i=start+num;i>start;i--){
result[start+num][i]=a++;}
//打印左边那行
for (int i=start+num;i>start;i--){
result[i][start]=a++;}
num-=2;
start++;
}
//如果n是奇数,手动给中间的赋值
if(num==0){
result[start][start]=a;
}
return result;
    }
}

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

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

相关文章

V-Box智能车载终端-OBUYZN2

1 产品概览 OBUYZN2型智能车载终端&#xff08;以下简称&#xff09;是 型智能车载终端&#xff08;以下简称&#xff09;是 型智能车载终端&#xff08;以下简称&#xff09;是 型智能车载终端&#xff08;以下简称&#xff09;是 组成智能网联 系统 的核心数据交互设备 &…

Java 顶层类(top-level class)的访问控制修饰符

在Java中&#xff0c;处于最外层的类就是顶层类&#xff08;top-level class&#xff09;&#xff0c;类的声明外面再没有其它的类包裹。 顶层类的访问控制修饰符只能是public、或者包访问控制修饰符&#xff08;也就是无访问控制修饰符&#xff09;。 访问控制修饰符访问范围…

用codetyphon开发一个单机版跨平台数据处理小软件

目录 1 前言 2 一种可能的方案 2.1 数据存储使用dbf格式 2.2 用Lazarus或CT开发 2.3 根据外部csv或者excel电子表格快速建表 2.4 用python汇总和审核 3 当前进度 3.1 根据excel电子表格快速自动建表和导入数据 3.2 显示数据 3.3 建立测试数据库 1 前言 现在各种现成的…

Vue天气案例

绑定事件的时候&#xff1a;xxx"yyy" yyy可以写一些简单的语句。 <body><div id"root"><h2>今天天气很{{info}}</h2><button click"changeWether">切换天气</button></div> </body><scr…

HBase-问题

最终理解HBase数据模型的关键在于稀疏、分布式、多维、排序的映射。其中映射map指代非关系型数据库的key-Value结构。 1.怎么理解稀疏&#xff1f; 不同的行有不同的列&#xff0c;这就叫稀疏 有的行有3个列&#xff0c;有的行有2个列&#xff0c;那么2个列的在显示的时候&a…

Unity之穿山甲SDK

SDK版本相关问题官网解答记录: 官网咨询工单地址记录&#xff1a; https://www.csjplatform.com/athena/user-feedback/order/list?identify_keycb790ca553ed7253d29a4dbd4041281b62c449f55d6faaeb4e744370c9b34e38&init_id652798&order_id652798

解决AntvX6的阴影残留

问题描述&#xff1a;在使用antVX6的过程中&#xff0c;有时候重选渲染会出现阴影残留。 解决&#xff1a; 每次重新渲染画布时&#xff0c;使用 clearCells API清除一下画布即可解决。 ... const graph new Graph({container: document.getElementById("app"),w…

高性能分布式缓存Redis(二) 高级应用

一、持久化原理 持久化 Redis是内存数据库&#xff0c;数据都是存储在内存中&#xff0c;为了避免进程退出导致数据的永久丢失&#xff0c;需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘&#xff1b;当下次Redis重启时&#xff0c;利用持久化文件实现数据恢…

UE4/5数字人Metahuman与Style3D的使用【一、Style3DAtelier软件制作smd格式衣服并导入ue】

目录 软件和插件下载 安装软件Style3DAtelier 放入插件 布料模拟制作&#xff1a; 导出人物 &#xff1a; 数字人与小白人 Style3D添加衣服&#xff1a; 导入小白人或数字人&#xff1a; 身高修改&#xff1a; uv调整 模拟查看情况&#xff1a; 导出smd格式&#x…

0. 开篇词 —— 风物长宜放眼量

个人简介 我是一名工作了6年的 Java 工程师&#xff0c;日常主要工作就是业务功能开发&#xff0c;但是业余时间喜欢研究一些开源框架和流行的技术。我本人是经典 ORM 框架 MyBatis 的 Contributor&#xff0c;同时也是微服务框架 Nacos 的核心 Contributor 和 gorm 的Contrib…

GPT3学习笔记

GPT-3概述 关于GPT-3的主要事实: 模型分类:GPT-3有8个不同的模型&#xff0c;参数从1.25亿到1750亿不等。 模型大小:最大的GPT-3模型有1750亿参数。这比最大的BERT模型大470倍(3.75亿个参数) 体系结构:GPT-3是一种自回归模型&#xff0c;使用仅有解码器的体系结构。使用下一…

mac ppt设置起始页码

今天发现我的ppt的左边ppt的缩略图的开始页码是从2开始的&#xff0c;觉得很奇怪&#xff0c;这个解决的办法就是 点击ppt->文件->页面设置->页眉和页脚->幻灯片编号

chatgpt赋能python:用Python自动化办公:优化SEO的关键

用Python自动化办公&#xff1a;优化SEO的关键 随着互联网的快速发展和人们对搜索引擎的依赖加深&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;这个概念也逐渐受到人们的关注。SEO可以帮助网站排名更高&#xff0c;吸引更多的访客并提高转化率&#xff0c;成为了许多企…

直接在Notepad++中运行GO语言-(通过NppExec插件)

前提条件&#xff1a; 1.建议阅读文章【直接在Notepad中运行GO语言】&#xff1a; 直接在Notepad中运行GO语言_go语言 notepad_西晋的no1的博客-CSDN博客 2.建议阅读文章【notepad 中安装NppExec插件】&#xff1a; notepad 中安装NppExec插件_西晋的no1的博客-CSDN博客 以下…

九、DockerFile解析

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、DockerFile介绍二、DockerFile构建过程解析2.1 Dockerfile内容基础知识2.2 Docker执行Dockerfile的大致流程2.3 Dockerfile、Docker镜像与Docker容器关系 三、Docke…

基于51单片机的数码管密码锁

基于51单片机的数码管密码锁是一种可以设置密码并通过输入密码来解锁的安全装置。该密码锁使用51单片机作为控制主板&#xff0c;配合数码管显示模块、按键模块和电磁锁等元件实现密码锁的功能。 实现步骤如下&#xff1a; 1. 硬件连接&#xff1a;将51单片机与数码管、按键模…

flutter mac环境配置

在 macOS 上安装和配置 Flutter 开发环境 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter一、配置flutter环境变量在 macOS 上安装和配置 Flutter 开发环境 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 解压文件放在我的文档里面 然后设置环境变量 1. 执…

OR青年导师访谈特辑 | 北京邮电大学助理教授 姜蔚蔚:如果不亲自尝试,就永远不知道自己的边界在哪

OR青年计划 由【运筹OR帷幄】社区主办的【OR青年计划】&#xff0c;旨在帮助对运筹学应用有理想和追求的同学&#xff0c;近距离与学界、业界导师交流课题&#xff0c;深入了解运筹学的细分方向&#xff0c;为后续的深造、就业生涯打下坚实的基础&#xff01;更多内容请查看链…

chatgpt赋能python:免费的Python教程:从入门到精通

免费的Python教程&#xff1a;从入门到精通 Python是如今最热门的编程语言之一&#xff0c;在众多编程语言中占据了重要的地位。Python有着简单易学的语法&#xff0c;充足的库支持&#xff0c;高效的执行速度和海量的社区支持&#xff0c;这些使得Python成为最适合初学者的编…

不知道识别表格的方式有哪些?分享识别表格怎么弄

小明&#xff1a;嘿&#xff0c;小红&#xff01;你知道吗&#xff1f;最近我在整理一堆纸质表格&#xff0c;但是手动输入数据实在太耗时间了&#xff0c;我在想有没有什么方法可以快速识别表格的内容呢&#xff1f; 小红&#xff1a;哦&#xff0c;我听说过有一些方式可以自…