[代码随想录打卡] Day1: 704. 二分查找 27. 移除元素 977.有序数组的平方

1. 二分查找

二分查找关键就是循环不变量:区间定义。是左闭右闭还是左闭右开。
初始化,while循环和if条件语句这三部分处理要一致。(之前刷过这个数组方面的题,但是再刷的时候又忘了。)

1.1 左闭右闭

[ l e f t , r i g h t ] [left, right] [left,right]左右区间的边界都是有意义可以取到的。在初始化的时候 r i g h t right right就要初始化为num.length-1,然后在循环判断的时候left和right是可以相等的,left和right相等左闭右闭区间中是有值的有效,然后在条件判断的时候,right的更新是middle-1,因为right是可以取到的,middle这个位置上的值明显不等于target,所以为了避免重复,right就取middle-1。

class Solution {public int search(int[] nums, int target) {//左闭右闭int left = 0;int right = nums.length-1;while(left<=right){int middle = left + (right-left)/2;if(nums[middle]==target){return middle;}else if(nums[middle]>target){right = middle-1;}else{left = middle+1;}}return -1;}
}
class Solution:def search(self, nums: List[int], target: int) -> int:right = len(nums)-1left = 0while(right >= left):mid = int(left+(right-left)/2)if(nums[mid] == target):return midelif(nums[mid]>target):right = mid-1else:left = mid+1return -1

1.2 左闭右开

[ l e f t , r i g h t ) [left, right) [left,right)区间左边界都是有意义可以取到的,右边界是取不到的。在初始化的时候 r i g h t right right就要初始化为num.length(因为right取不到,如果赋值为num.length-1就漏掉了最后一个值),然后在循环判断的时候left和right是不能相等的,left和right相等左闭右开区间中没有有效的值,然后在条件判断的时候,right的更新是middle,因为right是不可以取到的。

class Solution {public int search(int[] nums, int target) {//左闭右开int left = 0;int right = nums.length;while(left<right){int middle = left + (right - left)/2;if(nums[middle]==target){return middle;}else if(nums[middle]>target){right = middle;}else{left = middle+1;}}return -1;}
}
class Solution:def search(self, nums: List[int], target: int) -> int:right = len(nums)left = 0while(right > left):mid = int(left+(right-left)/2)if(nums[mid] == target):return midelif(nums[mid]>target):right = midelse:left = mid+1return -1

2. 移除元素

移除元素用到双指针。
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
主要的思想是定义一个快指针和慢指针,快指针就是找数组中符合条件的值,慢指针指明数组中更新的位置。然后将慢指针位置的值更新为快指针位置的值。

class Solution {public int removeElement(int[] nums, int val) {int remainNums = 0;int i=0,j=0;for(; j < nums.length; j++){//其中j是快指针,i是慢指针if(nums[j] != val){nums[i] = nums[j];i++;}}return i;}
}
class Solution:def search(self, nums: List[int], target: int) -> int:right = len(nums)left = 0# index = -1while(right > left):mid = int(left+(right-left)/2)if(nums[mid] == target):return midelif(nums[mid]>target):right = midelse:left = mid+1return -1

3. 有序数组的平方

有序数组的平方也需要双指针。当时没看题解和视频的时候,自己想的很复杂。
感觉关键一点就是结果数组从后往前更新,双指针一个在最左边一个在最右边,向中间移动。定义一个pos变量指示结果数组更新的位置。更新的时候,比较左右指针的值,获得最大值,将这个最大值赋值给结果数组当前pos位置,然后对应指针向中间移动。每次更新pos–。

class Solution {public int[] sortedSquares(int[] nums) {int n = nums.length;int right = n-1;int left = 0;int pos = n-1;int[] ans = new int[n];while(right>=left){int rightSquare = nums[right]*nums[right];int leftSquare = nums[left]*nums[left];if(rightSquare>leftSquare){ans[pos] = rightSquare;pos--;right--; }else{ans[pos] = leftSquare;pos--;left++;}}return ans;
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:n = len(nums)ans = [0]*ni, j, pos = 0, n-1, n-1while i<=j:if nums[i]*nums[i]>nums[j]*nums[j]:ans[pos] = nums[i]*nums[i]i +=1else:ans[pos] = nums[j]*nums[j]j -=1pos-=1return ans

参考力扣题目、文章、视频

  1. https://leetcode.cn/problems/binary-search/
  2. https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
  3. https://www.bilibili.com/video/BV1fA4y1o715/
  4. https://leetcode.cn/problems/remove-element/description/
  5. https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
  6. https://www.bilibili.com/video/BV12A4y1Z7LP/
  7. https://leetcode.cn/problems/squares-of-a-sorted-array/description/
  8. https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html
  9. https://www.bilibili.com/video/BV1QB4y1D7ep/?vd_source=145b0308ef7fee4449f12e1adb7b9de2

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提示词高级阶段学习day4.1

第一步&#xff1a;你要有一个大模型帐号&#xff0c;至少已经熟悉和它们对话的方式。最强性能当属ChatGPT4&#xff0c;当然也推荐国产平替&#xff1a; Kimi.ai - 帮你看更大的世界 智谱清言 第二步&#xff1a;看 OpenAI 的官方文档&#xff1a; 目录&#xff1a;OpenAI …

开源趣味艺术画板Paint Board

什么是 Paint Board &#xff1f; Paint Board 是简洁易用的 Web 端创意画板。它集成了多种创意画笔和绘画功能&#xff0c;支持形状绘制、橡皮擦、自定义画板等操作&#xff0c;并可以将作品保存为图片。 软件功能&#xff1a; 不过非常可惜&#xff0c;老苏最期待的数据同步还…

建设NFS服务器并实现文件共享

关闭防火墙和s0 systemctl stop firewalld setenforce 0 安装NFS yum install nfs-utils -y 新建共享目录并设置权限 echo "hello" > /nfs/shared/test1 chmod -Rf 777 /nfs/shared/ 配置服务端的NFS配置文件 vim /etc/exports /nfs/shared *(ro) 启动…

软件测试学习笔记丨SeleniumPO模式

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/22525 本文为霍格沃兹测试开发学社的学习经历分享&#xff0c;写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ 说明&#xff1a;本篇博客基于sel…

python通过keyboard库实现模拟/监听键盘

keyboard介绍 如果我们想要通过快捷键&#xff0c;来调用某段代码&#xff0c;我们可以使用python的keyboard库&#xff0c;这个库可以用于发送&#xff0c;挂钩&#xff0c;以及模拟键盘事件等&#xff0c;并且同时支持多种操作系统&#xff08;但是需要注意的是&#xff0c;…

Spring Boot 创建项目详细介绍

上篇文章简单介绍了 Spring Boot&#xff08;Spring Boot 详细简介&#xff01;&#xff09;&#xff0c;还没看到的读者&#xff0c;建议看看。 下面&#xff0c;介绍一下如何创建一个 Spring Boot 项目&#xff0c;以及自动生成的目录文件作用。 Maven 构建项目 访问 http…

windows下安装python库wordCloud报错

换电脑安装wordcloud半天安装失败&#xff0c;记录一下遇到的坑&#xff0c;也给大家节省点时间。 方法1&#xff1a; 错误呢就是下面这个&#xff0c;说没c编译器&#xff0c;要不就去他给的地址上安装一下&#xff0c;我安装了一下好像没什么用&#xff0c;也没太敢勾选&am…

未来之维,陈欣的智能CAD

第一章 新世界的曙光 在不远的未来&#xff0c;人类科技取得了前所未有的进步。人工智能不仅渗透到了生活的每一个角落&#xff0c;而且开始在科学研究、艺术创作乃至人类情感交流中扮演重要角色。在这个充满无限可能的时代&#xff0c;有一位年轻的女工程师——陈欣&#xff…

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8 1、.NET Reactor V6.9.8 功能简介2、官方下载 1、.NET Reactor V6.9.8 功能简介 业界领先的源代码保护 .NET Reactor通过多种方法来防止反编译&#xff0c;这些方法会将 .NET 程序集转换为任何现有工具都无法反编译的进程。…

2024 Rust现代实用教程:1.2编译器与包管理工具以及开发环境搭建

文章目录 一、Rust的编译器rustc二、开发环境搭建三、Rust的包管理工具Cargo四、项目结构1.Cargo.toml文件2.创建一个可执行文件项目3.创建一个库项目 参考 一、Rust的编译器rustc 查看版本 rustc-version编译生成二进制文件 rustc -o output filename filename.rs编译生成库…

macOS Sonoma 14.7.1 (23H222) Boot ISO 原版可引导镜像下载

macOS Sonoma 14.7.1 (23H222) Boot ISO 原版可引导镜像下载 2024 年 10 月 28 日&#xff0c;Apple 智能今日登陆 iPhone、iPad 和 Mac。用户现可借助 Apple 智能优化写作&#xff0c;为通知、邮件和消息生成摘要&#xff0c;体验交互更自然、功能更丰富的 Siri&#xff0c;使…

Kafka相关API开发

(一)引入依赖 用API直接去操作kafka(读写数据)在实际开发中用的并不多&#xff0c;学习它主要还是为了加深对Kafka功能的理解。kafka的读写操作&#xff0c;实际开发中&#xff0c;是通过各类更上层的组件去实现。而这些组件在读写kafka数据时&#xff0c;用的当然是kafka的jav…

Backtrader 数据篇 02

Backtrader 数据篇 本系列是使用Backtrader在量化领域的学习与实践&#xff0c;着重介绍Backtrader的使用。Backtrader 中几个核心组件&#xff1a; Cerebro&#xff1a;BackTrader的基石&#xff0c;所有的操作都是基于Cerebro的。Feed&#xff1a;将运行策略所需的基础数据…

Leetcode224 -- 基本计算器及其拓展

题目分析&#xff1a; 其实这个计算器的实现并不难&#xff0c;因为除了括号就剩下加减法嘛&#xff0c;括号肯定比加减法先执行&#xff0c;但是加减法是同级的&#xff0c;只是会改变数字的正负号而已&#xff0c;所以实现的逻辑并不是很难&#xff0c;我们只需要一个栈&…

【jvm】为什么Xms和Xmx的值通常设置为相同的?

目录 1. 说明2. 避免性能开销3. 提升稳定性4. 简化配置5. 优化垃圾收集6. 获取参数6.1 代码示例6.2 结果示例 1. 说明 1.-Xms 和 -Xmx 参数分别用于设置堆内存的初始大小&#xff08;最小值&#xff09;和最大大小。2.在开发环境中&#xff0c;开发人员可能希望快速启动应用程…

瑞芯微RK3566/RK3568 Android11下该如何默认屏蔽导航栏/状态栏?看这篇文章就懂了

本文介绍瑞芯微RK3566/RK3568在Android11系统下&#xff0c;默认屏蔽导航栏/状态栏方法&#xff0c;使用触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;Laval官方社区主荐&#xff0c;已适配全新OpenHarmony5.0 R…

使用AIM对SAP PO核心指标的自动化巡检监控

一、背景 由于SAP PO系统维护成本较高&#xff0c;各类型异常报错等都需要人员进行时刻监控和响应&#xff0c;遂由AIM平台进行自动化巡检SAP PO的各指标&#xff0c;然后告警通知用户&#xff0c;节省维护成本和提高工作效率 二、核心指标监控 SAP PO失败消息 适用于S…

openpnp - 手工修改配置文件(元件高度,size,吸嘴)

文章目录 openpnp - 手工修改配置文件(元件高度,size,吸嘴)概述笔记parts.xmlpackages.xml 手工将已经存在的NT1,NT2拷贝出来改名备注END openpnp - 手工修改配置文件(元件高度,size,吸嘴) 概述 载入新板子贴片准备时&#xff0c;除了引入Named CSV文件&#xff0c;还要在ope…

Centos下安装Maven(无坑版)

Linux 安装 Maven Maven 压缩包下载与解压 华为云下载源&#xff0c;自行选择版本 下面的示例使用的是 3.8.1 版本 wget https://repo.huaweicloud.com/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz解压 tar -zxvf apache-maven-3.8.1-bin.tar.gz移…

算法:排序

排序算法 1. 简单排序1.1 直接插入排序1.2 冒泡排序1.3 简单选择排序 2. 希尔排序3. 快速排序4. 堆排序5. 归并排序 将文件的内容按照某种规则进行排列。 排序算法的稳定判定&#xff1a;若在待排序的一个序列中&#xff0c; R i R_i Ri​和 R j R_j Rj​的关键码相同&#xf…