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

算法训练营第一天|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]

相关文章:

  • 【哈希表】1399. 统计最大组的数目
  • Java学习手册:Web 安全基础
  • 【KWDB 创作者计划】_上位机知识篇---MicroPython
  • 青少年编程与数学 02-018 C++数据结构与算法 06课题、树
  • Kairos 生态有哪些值得关注的进展?
  • 搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
  • Linux:进程地址空间
  • 基于Python将MongoDB文本数据通过text2vec-large-chinese模型向量化并存储到Milvus数据库的完整实现方案
  • 20、 DeepSeekMoE论文笔记
  • TCP 协议:原理、机制与应用
  • windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页
  • SVN仓库突然没有权限访问
  • 奇安信春招面试题
  • linux内核进程管理(1)——创建,退出
  • 两个面向视觉定位的遥感船舶数据集:RSSVGSARVG
  • 深入解析 Spring Boot Test:架构、核心组件与最佳实践
  • 《多Agent架构VS千万字长文本VS深度推理引擎——拆解Coze、通义、Kimi的AI终局博弈密码》
  • HCIP实验二(OSPF网络配置与优化)
  • Android kotlin通知功能完整实现指南:从基础到高级功能
  • 京东商品详情数据 API 接口讨论学习
  • “仿佛一场追星粉丝会”,老铺黄金完成国内头部商业中心全覆盖,品牌化后下一步怎么走?
  • 少数人的奢侈品还是所有人的必需品:我们如何解构创造力?
  • 准85后青海海北州副州长、州公安局局长李贤荣挂职临沂市副市长
  • 太空飞梭项目起火,南宁方特东盟神画:明火已扑灭,无人受伤
  • 李强签署国务院令,公布修订后的《中华人民共和国植物新品种保护条例》
  • 五一去哪玩?“时代交响”音乐会解锁艺术假期