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

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

数组理论基础

1.数组是存放在连续内存空间上的相同类型数据的集合。
2.数组的元素是不能删除的,只能覆盖。
3.不同语言不一样,在C++中,二维数组是连续分布的

704.二分查找

题目

题目

思路与解法

第一想法: 简单的二分查找,三个指针:left、right、mid。while left <= right 就持续进行二分查找。若是直到 left > right 都没找到,就是找不到了。

class Solution:def search(self, nums: List[int], target: int) -> int:left = 0right = len(nums) - 1while left <= right :mid = (left + right) // 2if target == nums[mid]:return midelif target < nums[mid]:right = mid -1else:left = mid + 1return -1

carl的讲解: 二分法有一个比较重要的思想 循环不变量。循环不变量 是指,在二分查找中,保持不变量(区间的定义就是不变量),就是在while寻找每一次边界的 处理逻辑 都要坚持根据区间的定义来操作。简单来说,怎么定义区间,就决定了数据取舍的逻辑。

27.移除元素

题目

移除元素

思路与解法

第一想法:
1.暴力法,找到一个就把后面的提上来,如下:

class Solution:def removeElement(self, nums: List[int], val: int) -> int:lens = len(nums)i = 0while i < lens:# print(i)if nums[i] == val:# print(nums[i])j  = iwhile j < lens-1 :nums[j] = nums[j+1]j += 1lens = lens - 1else:i = i + 1print(lens)return lens

2.快慢指针。慢指针是最终结果,快指针是用于遍历。 起初,快指针一直往后遍历,当值不等于value时,慢指针等于快指针;当遇到与value相同的值时,慢指针停下,快指针继续往后。如下:

class Solution:def removeElement(self, nums: List[int], val: int) -> int:slow = fast = 0lens = len(nums)while fast < lens:if nums[fast] != val:nums[slow] = nums[fast]slow += 1fast += 1elif nums[fast] == val:fast += 1return slow

977.有序数组的平方

题目

在这里插入图片描述

思路与解法

第一想法: 1. 暴力法

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:for i in range(len(nums)):nums[i] = nums[i] * nums[i]nums.sort()return nums

carl: 双指针。想要速度快,自然要想到用空间换

# 双指针(提前定义定长列表)
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:res = [float('inf')] * len(nums)left = 0right = len(nums) -1 i = len(nums) -1while left <= right:if nums[left] * nums[left] > nums[right] * nums[right]:res[i] = nums[left] * nums[left]i -= 1 left += 1else :res[i] = nums[right] * nums[right]right -= 1i -= 1# res.reverse()return res
# 双指针 + 反转列表
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:res = []left = 0right = len(nums) -1 while left <= right:if nums[left] * nums[left] > nums[right] * nums[right]:res.append(nums[left] * nums[left])left += 1else :res.append(nums[right] * nums[right])right -= 1# res.reverse()return res[::-1]
http://www.xdnf.cn/news/1395.html

相关文章:

  • 集结号海螺捕鱼组件搭建教程与源码结构详解(第四篇)
  • crictl 拉取镜像报错 Unimplemented desc = unknown service runtime.v1.ImageService
  • redis 使用 Docker 部署 简单的Redis 集群(包括哨兵机制)
  • 修电脑之电脑没有声音
  • 武装Burp Suite工具:xia SQL自动化测试_插件
  • date-picker组件的shortcuts为什么不能配置在vue的data的return中
  • 小红书文字配图平替工具
  • Vue3-原始值的响应式方案ref
  • 实时数仓体系概览与架构演进
  • python实战项目64:selenium采集软科中国大学排名数据
  • Django DRF实现用户数据权限控制
  • 服务器数据恢复—双循环RAID5数据恢复揭秘
  • 2025.04.23华为机考第二题-200分
  • 第七节:进阶特性高频题-Vue3的ref与reactive选择策略
  • 数据结构初阶:二叉树(四)
  • CSS3 基础(边框效果)
  • 从 Vue 到 React:React.memo + useCallback 组合技
  • PCB规则
  • 【android bluetooth 协议分析 11】【AVDTP详解 2】【avdtp 初始化阶段主要回调关系梳理】
  • 基于FPGA 和DSP 的高性能6U VPX 采集处理板
  • 深入解析C++ STL Queue:先进先出的数据结构
  • Android Gradle Plugin (AGP) 和 Gradle 的關係
  • 【Qwen2.5-VL 踩坑记录】本地 + 海外账号和国内账号的 API 调用区别(阿里云百炼平台)
  • 学习记录:DAY16
  • 2.RabbitMQ - 入门
  • 从入门到精通:CMakeLists.txt 完全指南
  • AI语音助手自定义角色百度大模型 【全新AI开发套件掌上AI+4w字教程+零基础上手】
  • 永磁同步电机控制算法-反馈线性化控制
  • 官方不存在tomcat10-maven-plugin插件
  • 【模板匹配】图像处理(OpenCV)-part10