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

算法训练第一天

704.二分查找

思路:

这道题其实没什么好说的,最经典的二分查找算法应用。个人习惯一直用的都是左闭右闭的方式。

代码:

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

27.移除元素

思路:

从题目上看需要原地移除所有数值等于 val 的元素,并且从示例2中:输入:nums = [0,1,2,2,3,0,4,2], val = 2,输出:5, nums = [0,1,4,0,3,,,_]看出,好像是将输入的后面0、4和前面的2进行了换位,那么我们就要想到最经典的选择排序算法思想,用一个指针从头遍历寻找最大的元素,另一个指针去指向最大的元素应该在的位置,然后交换。因此应用到这道题目上,我们应该用一个指针i从头开始遍历寻找val,另一个指针从指向最后一个元素,即val应该待在的位置。

代码:

class Solution:def removeElement(self, nums: List[int], val: int) -> int:num_len = len(nums)j = num_len-1i = 0while j>=0 and nums[j]==val:j = j-1if j==-1:return 0while i < j:if nums[i]==val:nums[i],nums[j] = nums[j],nums[i]j = j-1while j >= 0 and nums[j] == val:j = j - 1i+=1for k in range(0, len(nums)):if nums[k]==val:return k

977.有序数组的平方

思路:

首先是暴力解法:直接将数组中每个元素都平方,然后一个排序,但是这样尽管使用快排,但是时间复杂度为O(nlogn)。而且元素大部分有序,快排的时间复杂度接近O(n^2)。那么堆排?那也是O(nlogn)。那么如何达到进阶的要求:设计时间复杂度为 O(n) 的算法解决本问题。那我们继续看最终平方的数组,前半部分倒序,后半部分正序,那这不久是一个只排一次的归并排序吗?OK,我们只需要把第一个数组倒着遍历即可。

代码:

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:nums1 = []nums2 = []for i in nums:if i < 0:nums1.append(i*i)else:nums2.append(i*i)len1 = len(nums1)len2 = len(nums2)i = len1-1j = 0k = 0while i>=0 and j<len2:if nums1[i]<nums2[j]:nums[k] = nums1[i]k+=1i-=1else:nums[k] = nums2[j]k+=1j+=1while i>=0:nums[k] = nums1[i]k+=1i-=1while j<len2:nums[k] = nums2[j]k+=1j+=1return nums
http://www.xdnf.cn/news/691903.html

相关文章:

  • 深度解析 torch.mean 的替代方案
  • Web前端快速入门(Vue、Element、Nginx)
  • 通过海康萤石API控制家里相机的云台及抓图
  • PHP:从Web开发基石到现代应用引擎的进化之路
  • 青岛市长任刚与深兰科技董事长陈海波会谈,深兰青岛项目即将进入快车道!
  • Nacos注册中心原理
  • System Properties 和 Settings.Global 的区别
  • 尚硅谷redis7 70-72 redis哨兵监控之案例实操7
  • go实现定时任务
  • QT 5.15.2 程序中文乱码
  • Linux基础 -- Linux 启动调试之深入理解 `initcall_debug` 与 `ignore_loglevel`
  • JavaScript核心总结与现代化应用指南
  • 弥散制氧机工作机制:高原低氧环境的氧浓度重构技术
  • Laravel单元测试使用示例
  • linux安装ffmpeg7.0.2全过程
  • es6 函数解构
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论事件驱动架构及应用(包括解题思路和参考素材)
  • nova14 ultra,是如何防住80°C热水和10000KPa水压冲击的?
  • pytorch部分函数理解
  • 【网络通信】详解网络通信、实现 CS / BS架构 通信
  • xxl-job快速创建复制任务
  • IACEES 2025:创新材料与能源模式,迎接未来的挑战
  • 27、请求处理-【源码分析】-怎么改变默认的_method
  • 【周输入】517周阅读推荐-3
  • Spring Boot 启动流程深度解析:从源码到实践
  • 【烧脑算法】定长滑动窗口:算法题中的“窗口”智慧
  • MySQL OCP 与 Oracle OCP 认证,怎么选?
  • 怎样将win11+ubuntu双系统的ubuntu从机械硬盘迁移至固态硬盘(1)
  • 【Elasticsearch】track_total_hits
  • CAD图纸中的文字看不到,这是什么原因?