算法训练(leetcode)二刷第一天 | 704. 二分查找、27. 移除元素、977. 有序数组的平方

刷题记录

  • 704. 二分查找
  • 27. 移除元素
  • 977. 有序数组的平方
    • 思路1
    • 思路二

704. 二分查找

leetcode题目地址

经典二分查找思路,有序列表左右边界向中间夹逼。

时间复杂度: O ( l o g n ) O(logn) O(logn)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {public int search(int[] nums, int target) {int left = 0, right = nums.length-1, mid;while(left<=right){mid = left + ((right - left) >> 1);if(nums[mid] == target) return mid;if(nums[mid] > target) right = mid - 1;else left = mid + 1;}return -1;/*// 暴力法for(int i=0; i<nums.length; i++){if(nums[i] == target) return i;}return -1;*/}
}

27. 移除元素

leetcode题目地址

双指针法。右指针负责遍历数组,左指针负责标记不等于val元素的列表末尾。
当右指针遇到非val元素时,将该元素赋值到左指针为止,两个指针同时后移。
当右指针遇到val元素时,左指针不动,右指针后移。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {public int removeElement(int[] nums, int val) {int left = 0, right = 0;while(right<nums.length){if(nums[right] == val){right++;}else{nums[left] = nums[right];left++;right++;}}return left;}
}

977. 有序数组的平方

leetcode题目地址

思路1

这种写法比较繁琐。题目给定序列为非递减顺序,分三种情况:

  • 全为正数
    直接正序平方存入结果数组。
  • 全为负数
    逆序平方存入结果数组。
  • 有正有负数
    找到正负数分界点,从中间向两边找较小值正序存入结果数组。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {public int[] sortedSquares(int[] nums) {int right = 0, left = 0;int[] res = new int[nums.length];int cnt = 0;if(nums[0]>0 && nums[0] * nums[nums.length-1]>0){// 正数单调递增序列for(int i=0; i<=nums.length-1; i++) res[cnt++] = nums[i] * nums[i]; }else if(nums[0]<0 && nums[0] * nums[nums.length-1]>0){// 正数单调递增序列for(int i=nums.length-1; i>=0; i--) res[cnt++] = nums[i] *nums[i]; }else{// 寻找分界点for(; right<nums.length && nums[right]<0; right++){}left = right-1;while(left>=0 && right <= nums.length-1){if(-nums[left] > nums[right]) {res[cnt++] = nums[right] * nums[right];right++;}else{res[cnt++] = nums[left] * nums[left];left--;}}while(left>=0){res[cnt++] = nums[left] * nums[left];left--;}while(right <= nums.length-1){res[cnt++] = nums[right] * nums[right];right++;}}return res;}
}

思路二

对思路一的反向思维。最复杂的情况就是数组中有正有负,这种情况下,平方后的最小值出现在正负分界点,最大值出现在列表的两端。因此之间从列表两端找平方后的最大值逆序存入结果列表。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {public int[] sortedSquares(int[] nums) {int left = 0, right = nums.length-1;int[] res = new int[nums.length];int idx = right;while(left<=right){if(Math.abs(nums[left]) > Math.abs(nums[right])){res[idx--] = nums[left] * nums[left];left++;}else{res[idx--] = nums[right] * nums[right];right--;}}return res;}
}

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

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

相关文章

Pagehelper获取total错误

前言 在使用若依框架的pagehelper时&#xff0c;给分页表设置数据的时候前端只收到了分页的那一页的数据&#xff0c;总记录数不符合要求 我想要的效果如下&#xff0c;可以实现分页&#xff0c;和显示总记录数 但是实际情况为 但是我的数据库有11条记录&#xff0c;他这里明…

QCY开放式耳机值得买吗?南卡、QCY、韶音开放式耳机最全测评!

​开放式耳机最近还挺火的&#xff0c;因为相对于传统的入耳式耳机来说&#xff0c;它佩戴起来更舒适&#xff0c;也更卫生&#xff0c;更加适配运动场景&#xff0c;现在不少的健身或者运动博主都选择了开放式耳机&#xff0c;那么作为一个同样喜欢跑步的数码博主&#xff0c;…

开源一个C缓存库

1 简介 在当下的视频点播应用场景下&#xff0c;端侧对视频缓存的需求可谓刚需&#xff0c;一方面可以为公司节省流量成本&#xff0c;一方面也可以提升用户的播放体验&#xff0c;有一石二鸟之效。 近期&#xff0c;本人用C写了一个缓存库&#xff0c;支持iOS/Android/harmony…

java项目之信息化在线教学平台的设计与实现(源码+文档)

项目简介 信息化在线教学平台的设计与实现实现了以下功能&#xff1a; 信息化在线教学平台的设计与实现的主要使用者管理员功能有个人中心&#xff0c;学生信息管理&#xff0c;教师信息管理&#xff0c;教学信息管理&#xff0c;学生成绩管理&#xff0c;留言板管理&#xf…

番外篇 | 史上最全的关于CV的一些经典注意力机制代码汇总

前言:Hello大家好,我是小哥谈。注意力是人类认知系统的核心部分,它允许我们在各种感官输入中筛选和专注于特定信息。这一能力帮助我们处理海量的信息,关注重要的事物,而不会被次要的事物淹没。受到人类认知系统的启发,计算机科学家开发了注意力机制,这种机制模仿人类的这…

vue开发环境、生产环境配置与nginx配置后端代理转发跨域

一、配置步骤 在Vue项目中,通常会在项目的环境配置文件中设置不同环境下的API接口地址。对于生产环境,你可以使用Nginx作为反向代理来处理后端地址的转发。 1.在Vue项目中的env文件夹下,找到env.production文件,并设置生产环境下的API接口地址: module.exports = {NODE…

《语音识别芯片选型全攻略》

《语音识别芯片选型全攻略》 一、语音识别芯片性能评估&#xff08;一&#xff09;主控芯片性能评估&#xff08;二&#xff09;接口需求分析&#xff08;三&#xff09;可靠性评估&#xff08;四&#xff09;生产工艺考量&#xff08;五&#xff09;湿敏等级判断 二、语音识别…

倍福TwinCAT程序中遇到的bug

文章目录 问题描述&#xff1a;TwinCAT嵌入式控制器CX5140在上电启动后&#xff0c;X001网口接网线通讯灯不亮&#xff0c;软件扫描不到硬件网口 解决方法&#xff1a;硬件断电重启后&#xff0c;X001网口恢复正常 问题描述&#xff1a;TwinCAT软件点击激活配置后&#xff0c;…

汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡

故障现象  一辆2022款大众捷达VS5汽车&#xff0c;搭载EA211发动机和手自一体变速器&#xff0c;累计行驶里程约为4.5万km。该车行驶中挡位偶尔会锁在D3挡&#xff0c;车速最高约50 km/h&#xff0c;且组合仪表上的发动机故障灯和EPC灯异常点亮。 故障诊断  用故障检测仪检…

【AI工具大集合】

在当今快速发展的人工智能领域&#xff0c;AI工具的种类繁多&#xff0c;它们在不同的行业和领域中发挥着重要作用。以下是一些常用的AI工具&#xff01; 一、AI实用工具 1. AI聊天机器人 Youchat&#xff1a;类似于搜索引擎的AI聊天机器人&#xff0c;能够实时从互联网获取信…

SQL语句查询

SQL语句查询 查询产生一个虚拟表 看到的是表形式显示的结果&#xff0c;但结果并不真正存储 每次执行查询只是从数据表中提取数据&#xff0c;并按照表的形式显示出来 查询语法 SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] SELECT …

【python书籍-附电子版】Python入门零基础必看书籍,python编程入门教程指南,从入门到精通,这几本书太牛了!!

今天为大家推荐的“Python 编程三剑客”是新手小白学习编程的不二之选&#xff01;这三本书分别从不同的角度&#xff0c;对 Python 编程进行了详细的解析。 &#xff08;领取方式见文末&#xff09; 一《Python编程&#xff1a;从入门到实践》 第一本为你打下坚实的基础&am…

MongoDB聚合管道(Aggregation Pipeline)

聚合管道&#xff08;Aggregation Pipeline&#xff09;是MongoDB中用于对数据进行处理和分析的一种强大机制。它由一系列的阶段&#xff08;Stage&#xff09;组成&#xff0c;每个阶段对输入的数据进行一种特定的操作&#xff0c;然后将结果传递给下一个阶段&#xff0c;就像…

【VAE】 VQ-VAE: 离散潜在空间的艺术

大家好&#xff01;今天我们来聊聊一个有趣的深度学习模型&#xff1a;Vector Quantized Variational AutoEncoder&#xff08;VQ-VAE&#xff09;。这个模型看似复杂&#xff0c;实则蕴含着深刻的智慧。让我们一起来探索这个模型的奥秘吧&#xff01; 什么是 VQ-VAE&#xff…

详解安卓和IOS的唤起APP的机制,包括第三方平台的唤起方法比如微信

网页唤起APP是一种常见的跨平台交互方式&#xff0c;它允许用户从网页直接跳转到移动应用程序。 这种技术广泛应用于各种场景&#xff0c;比如让用户在浏览器中点击链接后直接打开某个应用&#xff0c;或者从网页引导用户下载安装应用。实现这一功能主要依赖于URL Scheme、Univ…

基于Java+SpringBoot+Vue的网上购物商城系统研发

基于JavaSpringBootVue的网上购物商城系统研发 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345…

门店收银系统源码-php+flutter+uniapp

1. 系统开发语言 核心开发语言: PHP、HTML5、Dart 后台接口: PHP7.3 后台管理网站: HTML5vue2.0element-uicssjs 线下收银台&#xff08;安卓/PC收银、安卓自助收银&#xff09;: Dart3 框架&#xff1a;Flutter 3.19.6 移动店务助手: uniapp 线上商城: uniapp 2.线下收…

【Git】常用Git命令

1. Git 仓库的基本操作 git init&#xff1a;在当前目录下初始化一个新的 Git 仓库。git clone <repository>&#xff1a;从远程仓库克隆一个 Git 仓库到本地。git status&#xff1a;查看工作目录和暂存区的状态&#xff0c;显示哪些文件被修改或未跟踪。git add <f…

【虚拟化】内核级虚拟化技术KVM介绍,全/半虚拟化的区别,使用libvirt搭建虚拟化平台(go/java/c++)

【虚拟化】内核级虚拟化技术KVM介绍&#xff0c;全/半虚拟化的区别&#xff0c;使用libvirt搭建虚拟化平台&#xff08;go/java/c&#xff09; 文章目录 1、虚拟化技术分类与架构&#xff08;KVM&#xff0c;Xen&#xff09;&#xff0c;全/半虚拟化的区别2、libvirt介绍3、使用…

leetcode栈与队列(一)-有效的括号

题目 . - 力扣&#xff08;LeetCode&#xff09; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的…