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

冲冲冲,力扣javascript刷题——数组总结

力扣javascript刷题——数组总结

  • 冲冲冲,力扣刷题——数组总结
    • 1.二分查找
      • 力扣704题:二分查找
      • 35.搜索插入位置
      • 34.在排序数组中查找元素的第一个和最后一个位置
      • 69.x 的平方根
      • 367. 有效的完全平方数
    • 2.双指针法
      • 27. 移除元素
      • 26. 删除有序数组中的重复项
      • 283.移动零
      • 844. 比较含退格的字符串
      • 977. 有序数组的平方
    • 3.滑动窗口
      • 209.长度最小的子数组
      • 904.水果成篮(努力理解中...)
      • 76.最小覆盖子串(未解决)
    • 4.模拟行为
      • 54.螺旋矩阵

冲冲冲,力扣刷题——数组总结

陆陆续续把数组的力扣经典题刷完了,刷完后还是会出现忘记的情况,先对刷过的题进行总结,好记性不如烂笔头,冲冲冲~

1.二分查找

力扣704题:二分查找

在这里插入图片描述

这个题的关键点在于升序数组无重复,这种题最适合用二分法,用二分法的一个重要技术点就是边界问题,这里需要注意的是区间不变量,比如,下面的解法就是坚持left>=right,即我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right]

/*** @param {number[]} nums* @param {number} target* @return {number}*/
var search = function(nums, target) {var left=0;var right=nums.length-1;var mid=0;while(left<=right){mid=left+((right-left)>>1);if(nums[mid]==target){return mid;}else if(nums[mid]>target){right=mid-1;}else{left=mid+1;}}return -1;
};

35.搜索插入位置

在这里插入图片描述
这个题和上面的题很类似:

/**
/*** @param {number[]} nums* @param {number} target* @return {number}*/
var searchInsert = function(nums, target) {var left=0;var right=nums.length-1;var mid=0;while(left<=right){mid=left+((right-left)>>1);if(nums[mid]==target){return mid;}else if(nums[mid]>target){right=mid-1;}else{left=mid+1;}}return left;
};

34.在排序数组中查找元素的第一个和最后一个位置

在这里插入图片描述

这个题的关键词:非递减顺序有重复:

/*** @param {number[]} nums* @param {number} target* @return {number[]}*/
var searchRange = function(nums, target) {var left=0;var right=nums.length-1;var resultNums=[];var mid=0;while(left<=right){mid=left+((right-left)>>1);if(nums[mid]==target){var i=midwhile(nums[i]==nums[i-1]){i--;}resultNums[0]=i;while(nums[i]==nums[i+1]){i++;}resultNums[1]=i;return resultNums;}else if(nums[mid]>target){right=mid-1;}else{left=mid+1;}}return [-1,-1];
};

69.x 的平方根

在这里插入图片描述
虽然这个题不是数组了,但是整体结构还是像数组,数组的二分法思想照样可以用在这里;

/*** @param {number} x* @return {number}*/
var mySqrt = function(x) {var left=0;var right=x;var mid=0;while(left<=right){mid=left+((right-left)>>1);if(mid*mid==x){return mid;}else if(mid*mid>x){right=mid-1;}else{left=mid+1;}}return right;
};

367. 有效的完全平方数

在这里插入图片描述

/*** @param {number} num* @return {boolean}*/
var isPerfectSquare = function(num) {var left=0;var right=num;var mid=0;while(left<=right){mid=left+((right-left)>>1);if(mid*mid==num){return true;}else if(mid*mid>num){right=mid-1;}else{left=mid+1;}}return false;
};

2.双指针法

双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

  • 暴力解法时间复杂度:O(n^2)
  • 双指针时间复杂度:O(n)

27. 移除元素

在这里插入图片描述
解法借用代码随想录中的图解:
在这里插入图片描述

/*** @param {number[]} nums* @param {number} val* @return {number}*/
var removeElement = function(nums, val) {var slowIndex=0;var fastIndex=0;for(fastIndex;fastIndex<nums.length;fastIndex++){if(nums[fastIndex]!=val){var temp=nums[fastIndex];nums[slowIndex]=temp;slowIndex++;}}return slowIndex;
};

26. 删除有序数组中的重复项

在这里插入图片描述
这个题的关键词是升序排列(这个题我老是出错,mark一下~)

/*** @param {number[]} nums* @return {number}*/
var removeDuplicates = function(nums) {var slowIndex=0var fastIndex=1for(fastIndex=0;fastIndex<nums.length;fastIndex++){if(nums[slowIndex]!=nums[fastIndex]){nums[++slowIndex]=nums[fastIndex]}}return slowIndex+1
};

283.移动零

在这里插入图片描述

/*** @param {number[]} nums* @return {void} Do not return anything, modify nums in-place instead.*/
var moveZeroes = function(nums) {var fastIndex=0;var slowIndex=0;for(fastIndex;fastIndex<nums.length;fastIndex++){if(nums[fastIndex]!=0){nums[slowIndex]=nums[fastIndex];slowIndex++;}}for(slowIndex;slowIndex<nums.length;slowIndex++){nums[slowIndex]=0;}return nums;
};

844. 比较含退格的字符串

在这里插入图片描述
写这个题的时候卡了超级久,原因是审题错了,刚开始我一直以为退格的意思就是删掉前面所有的字符,然后重新输入,导致一直通过不了,浪费了大量时间,哎,以后一定要吸取教训,认真看官方给的案例!!!
这里遇到了一个坑,刚开始我写的代码是这样的:

/*** @param {string} s* @param {string} t* @return {boolean}*/
var backspaceCompare = function(s, t) {function shuangzhizhen(s){var slowIndex=0;var fastIndex=0;for(fastIndex;fastIndex<s.length;fastIndex++){if(s[fastIndex]!='#'){var temp=s[fastIndex];s[slowIndex]=temp;slowIndex++;}else if(slowIndex!=0){slowIndex--;}}s=s.substring(0,slowIndex)return s}s=shuangzhizhen(s);t=shuangzhizhen(t);return s==t;
};

按理说,逻辑上是没有错误的,但是一直通不过案例,为什么呢?查阅文献,才发现,js代码具有不变性,在 JavaScript 中,字符串 的值是 不可变的,这意味着一旦字符串被创建就不能被改变。比如下面的代码:

	var myStr = "Bob";myStr[0] = "J";

是不会把变量myStr的值改变成“Job”的,因为变量myStr是不可变的。
注意,这并不意味着myStr永远不能被改变,只是字符串字面量string literal的各个字符不能被改变。
改变 myStr 中的唯一方法是重新给它赋一个值,我思考了很久,后来还是决定新建一个数组去解决问题:

/*** @param {string} s* @param {string} t* @return {boolean}*/
var backspaceCompare = function(s, t) {function shuangzhizhen(s){var slowIndex=0;var fastIndex=0;var temp=[];var i=0;for(fastIndex;fastIndex<s.length;fastIndex++){if(s[fastIndex]!='#'){temp[slowIndex]=s[fastIndex];slowIndex++;}else if(slowIndex!=0){slowIndex--;}}     return temp.toString().substring(0,slowIndex)}s=shuangzhizhen(s);t=shuangzhizhen(t);return s==t;
};

977. 有序数组的平方

在这里插入图片描述
这个题的技巧在于,它是按照非递减顺序排列的,所以平方的最大值应该是在两边出现

/*** @param {number[]} nums* @return {number[]}*/
var sortedSquares = function(nums) {var index1=0;var index2=nums.length-1;var i=nums.length-1;var numsResult=[];while(index2!=index1){if(nums[index1]*nums[index1]>=nums[index2]*nums[index2]){numsResult[i]=nums[index1]*nums[index1];i--;index1++;}else{numsResult[i]=nums[index2]*nums[index2];i--;index2--;}}numsResult[i]=nums[index2]*nums[index2];return numsResult;
};

3.滑动窗口

209.长度最小的子数组

在这里插入图片描述

/*** @param {number} target* @param {number[]} nums* @return {number}*/
var minSubArrayLen = function(target, nums) {var res=nums.length+1;var Sum=0;var index=0;for(var i=0;i<nums.length;i++){Sum=Sum+nums[i];while(Sum>=target){if(res>(i-index+1)){res=i-index+1;}Sum=Sum-nums[index];index++;}}if(res>nums.length){return 0;}else{return res;}
};

904.水果成篮(努力理解中…)

在这里插入图片描述
这个题还挺复杂┭┮﹏┭┮,刚开始看了好几遍都没看懂,还是看了评论区的答案才知道咋写:

/*** @param {number[]} fruits* @return {number}*/
var totalFruit = function(fruits) {let l = 0;//起始指针let maxLen = 0;//窗口的最大长度 其中最多包涵两种水果let n = 0//前一类水果的结束位置let arr = [fruits[l]]//水果的种类数组for(let r = 0; r < fruits.length; r++){//窗口的右指针不断前进if(!arr.includes(fruits[r])){//如果窗口中不包含 进窗口的水果if(arr.length <= 1){//如果只有一种水果arr[1] = fruits[r]//将这种水果加入arr数组}else{//如果有两种水果l = n//更新窗口的左边界arr[0] = fruits[r-1]//更新arr中水果的种类arr[1] = fruits[r]}}if(fruits[r] !== fruits[n]){//如果进来了一种新的类型的水果 更新前一种水果的位置n = r}maxLen = Math.max(maxLen,r-l+1)//更新滑动窗口的最大值}return maxLen
};

这个题其实到现在也还是一知半解的,在努力理解了…

76.最小覆盖子串(未解决)

在这里插入图片描述

这是道hard题,我发现我之前刷题的时候漏掉这道题了,今天整理这个文档花费太多时间了,平时还要应付科研,暂时先放一放,明天或者后天把这个题克服掉,mark一下…

4.模拟行为

54.螺旋矩阵

在这里插入图片描述

/*** @param {number} n* @return {number[][]}*/
var generateMatrix = function(n) {var matrix1=new Array(n);for(var i=0;i<n;i++){matrix1[i]=new Array(n);}var left=0;var right=n-1;var top=0;var buttom=n-1;var num=1;while(left<=right&&top<=buttom){for(var i=left;i<=right;i++){matrix1[top][i]=num;num++;}top++;for(var i=top;i<=buttom;i++){matrix1[i][right]=num;num++;}right--;for(var i=right;i>=left;i--){matrix1[buttom][i]=num;num++;}buttom--;for(var i=buttom;i>=top;i--){matrix1[i][left]=num;num++;}left++;}return matrix1
};

这个题目难点在于写着写着就不知道逻辑到哪里去了,然后容易出错,其他倒没啥问题。

今天就总结到这里吧,今天总结了一下午加晚上两个小时才总结完,能把算法刷熟练的人都不容易,我平时科研任务比较重,本来学习时间就很短,以后一定要记得一周总结一次,不然真的很累,一次性总结这么多┭┮﹏┭┮

相关文章:

冲冲冲,力扣javascript刷题——数组总结

力扣javascript刷题——数组总结冲冲冲&#xff0c;力扣刷题——数组总结1.二分查找力扣704题:二分查找35.搜索插入位置34.在排序数组中查找元素的第一个和最后一个位置69.x 的平方根367. 有效的完全平方数2.双指针法27. 移除元素26. 删除有序数组中的重复项283.移动零844. 比较…...

使用kotlin编写html dsl框架

前排提醒&#xff0c;这个框架就是我写着玩的&#xff0c;如果您已经会使用vue或其他前端框架&#xff0c;这篇文章可能对您没有什么意义。即使您不会如上提到的框架&#xff0c;也不要对该框架报有过高的期待&#xff0c;该框架更多的是&#xff0c;我自己的自娱自乐。 这里还…...

【谷粒学院】MybatisPlus(1~17)

1.项目介绍 2.项目背景介绍 3.项目商业模式介绍 4.项目功能模块介绍 5.项目技术点介绍 6.项目技术点-MybatisPlus介绍 官网&#xff1a;http://mp.baomidou.com/ MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做…...

C++的输入输出

目录 一、基本的输入输出 二、I/O库头文件 三、标准输出流&#xff08;cout&#xff09; 四、标准输入流&#xff08;cin&#xff09; 五、标准错误流&#xff08;cerr&#xff09; 六、标准日志流&#xff08;clog&#xff09; 一、基本的输入输出 C 标准库提供了一组丰…...

RNN相关知识总结

目录RNN结构与原理1.模型总览2.反向传播LSTM结构与原理1.模型总览2.如何解决RNN梯度消失/爆炸问题&#xff1f;GRU结构及原理1.模型总览LSTM与GRU的区别RNN结构与原理 1.模型总览 上图是RNN的展开结构图&#xff0c;由输入层、隐藏层和输出层组成。当前时间步t 的隐藏状态hth_…...

2. 应用C/C++编写程序

2.1 一个完整的C++源程序 例题是参考书《C++程序设计--基础,编程抽象与算法策略》第一章的PowersOfTwo.cpp。当运行程序PowersOfTow时,计算机要询问指数是多少,即2的多少次方。例如,输入8,程序会产生2的0到8次方的值。 /* File: PowersOfTwo.cpp *程序注释 …...

Spring Boot 统一功能处理(用户登录权限效验-拦截器、异常处理、数据格式返回)

文章目录1. 统一用户登录权限效验1.1 最初用户登录权限效验1.2 Spring AOP 统一用户登录验证1.3 Spring 拦截器1.4 练习&#xff1a;登录拦截器1.5 拦截器实现原理1.6 统一访问前缀添加2. 统一异常处理3. 统一数据格式返回3.1 统一数据格式返回的实现3.2 ControllerAdvice 源码…...

oracle存储过程的使用

文章目录oracle存储过程的使用基本结构管理存储过程调用存储过程的方法存储过程参数关键词&#xff1a; IN 和outin/out测试案例调用in/out测试案例存储过程语法DECLARE声明关键词赋值使用in/out将值作为子程序的参数分配给变量&#xff0c;看上面的案例为布尔变量赋值表达式串…...

一些无线通信系统模型的概念

一些无线通信系统模型的概念 扩频通信,指的是系统的带宽WWW远大于其信息传输速率R(bits/s)R(bits/s)R(bits/s), 定义展频带因子BeWRB_e \frac{W}{R}Be​RW​, 易知在扩频通信系统中,BeB_eBe​远大于1. 在频率上产生如此大的冗余度,主要是为了减轻无线通信或卫星通信中经常产生…...

GAIDC 2023盛会迎来大模型论坛“主场”,百度飞桨护航大模型产业发展

‍‍‍‍2月25日-26日&#xff0c;2023全球人工智能开发者先锋大会&#xff08;GAIDC&#xff09;在上海临港举行&#xff0c;大会以“向光而行的AI开发者”为主题&#xff0c;汇聚了当前科技和产业革命中的开发者先锋力量。百度深度参与本次大会&#xff0c;飞桨联合上海市人工…...

Python编写GUI界面案例:实现免费下载器

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 本次网站&#xff1a; 本文所有模块\环境\源码\教程皆可点击文章下方名片获取此处跳转 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 模块使用&#xff1a; import parsel >>> pip install parsel…...

我的 System Verilog 学习记录(6)

引言 本文简单介绍 SystemVerilog 语言的 线程。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; 我的 System Verilog 学习记录&#xff08;3&#xff09; 我的 System Verilog 学…...

SAP 常见问题大全及问题解决大全

1.A:在公司代码分配折旧表时报错? 在公司代码分配折旧表时报错&#xff0c;提示是“3000 的公司代码分录不完全&#xff0d;参见长文本” 希望各位大侠帮我看看。 3000 的公司代码分录不完全&#xff0d;参见长文本 R: a.你把零进项税的代码分配给这个公司代码就可以了 …...

10.Quartz实现定时打分 热帖排行

1.Spring Quartz(1)简介核心组件scheduler 接口&#xff1a;核心调度工具&#xff0c;所有任务由这一接口调用job&#xff1a;定义任务&#xff0c;重写execute方法JobDetail接口&#xff1a;配置描述Trigger接口&#xff1a;什么时候运行&#xff0c;以什么样的频率运行(2)Spr…...

pandas 读取Excel 批量转换时间戳

一、安装 pip install pandas 如果出报错&#xff0c;不能运行&#xff0c;可以安装 pip install xlrd 二、 代码如下 import pandas as pd import time,datetimefile_path rC:\Users\Administrator\Desktop\携号转网测试\admin_log.xls df pd.read_excel(file_path, sheet_n…...

绕过检测之Executor内存马浅析(内存马系列篇五)

写在前面 前面已经从代码层面讲解了Tomcat的架构&#xff0c;这是内存马系列文章的第五篇&#xff0c;带来的是Tomcat Executor类型的内存马实现。有了前面第四篇中的了解&#xff0c;才能更好的看懂内存马的构造。 前置 什么是Executor Executor是一种可以在Tomcat组件之间…...

《C++模板进阶》

致前行的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 前言&#xff1a; 1.非类型模板参数 1.1.概念&#xff1a; 1.2.使用注意事项 2.模板特化 2.1函数模板特化 2.2类模板特化 3.模板的分离编译 3.1什么…...

【项目管理】项目进度管理中的逻辑关系

项目的进度管理是项目核心管理之一&#xff0c;通过合理的进度安排&#xff0c;制定出科学可行的分项工期表&#xff0c;并条理清晰的显示出项目进度之间的逻辑关系。 1、目标是计划的灵魂 进度计划必须按照确定的项目总进度要求进行编制&#xff0c;了解项目总目标和整体安…...

ARM的汇编指令集

一、汇编指令 1.1 指令与伪指令 汇编的指令 指令是CPU机器指令的助记符&#xff0c;编译后会得到一串二进制机器码&#xff0c;由CPU执行 汇编的伪指令 伪指令本质上不是指令&#xff0c;它是编译器环境提供用来指导编译过程&#xff0c;编译后伪指令不会生成机器码 伪指令…...

@font-face用法超详细讲解

文章目录font-face是什么font-face基本语法urlTTFOTFEOTWOFFSVGformatfont-face用法示例font字体下载ttf-to-eot 字体转换器https://blog.csdn.net/qq_37417446/article/details/106728725 https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-face font-face是什么 font-…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...