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

代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素、209.长度最小的子数组

 704. 二分查找

思路:刷过很多次了,就是双指针思想,初始化一个在数组最左边的指针index_l,一个在最右边的指针index_r,当index_l < index_r 的时候通过判断index_l 和 index_r所确定的区间,缩小区间,最后夹逼出我们的目标值。

注意的点:最终状态会有两个 :1.l与r相等 最后的最终状态 直接在函数最后返回,2.l 和 r的mid是最终结果,此时我们就直接返回 否则最后 lr不会想等,不好确定返回哪个值

题解:

func search(nums []int, target int) int {r := len(nums) - 1l := 0mid := (l + r) / 2for l < r {if target < nums[mid] {r = mid - 1} else if target > nums[mid] {l = mid + 1} else {return mid}mid = (l + r) / 2}if nums[mid] != target {return -1}return mid
}

时间复杂度:O(n)

空间复杂度:O(1) 

27. 移除元素

思路:快慢指针,两个指针从头开始走,用快指针来更新慢指针指向的值,当且仅当慢指针指向的位置不是目标值,慢指针才移动,快指针正常移动到结尾,一次对整个数组的遍历即实现了删除。

注意的点:注意慢指针的更新条件

题解:

func removeElement(nums []int, val int) int {nums_len := len(nums)fast := 0slow := 0for fast < nums_len{nums[slow] = nums[fast]if(nums[slow] != val){slow++}fast++}return slow
}

  

时间复杂度:O(n)

空间复杂度:O(1) 

 

977.有序数组的平方

思路:一开始只想到了暴力解,想着把所有数平方了并排序,看了题解发现可以用双指针,然后按照双指针写了一次

注意的点:多考虑优化,

暴力题解:

func sortedSquares(nums []int) []int {for i,num := range nums{nums[i] = num * num}sort.Ints(nums)return nums
}

 优化:

func sortedSquares(nums []int) []int {index := len(nums) - 1res := make([]int,len(nums))l := 0r := len(nums) - 1for l < r {if nums[r]*nums[r] >= nums[l]*nums[l] {res[index] = nums[r] * nums[r]index--r--} else {res[index] = nums[l] * nums[l]index--l++}}if (l == r) {res[index] = nums[r]*nums[r]}return res
}

  

http://www.zskr.cn/news/6822.html

相关文章:

  • 从 MLPerf Storage v2.0 看 AI 训练中的存储性能与扩展能力
  • Revit二次开发 钢筋生成API(二)
  • Uri uri = new Uri(Path); 这行代码的作用
  • new 和make 切片和map
  • Git 常用操作指南
  • 【光照】[自发光Emission]以UnityURP为例
  • mybatis-plus初体验,解决报错Invalid value type for attribute factoryBeanObjectType: java.lang.String
  • 04_UDP协议
  • 从0到1搭建数据分析自动化程序链,AI应用架构师的实战指南
  • IOS App技术支持网址(URL)
  • C++ 内存管理
  • The 2024 CCPC Online Contest 7/12 L/B/K/D/J/E/C
  • 在joule里面使用agent 功能
  • qoj10093 Jump the Frog
  • new 和make
  • 墨刀是否能替代Axure?从产品经理三大画图能力深度分析
  • 唯创知音AI语音交互芯片与模组介绍
  • 用 Go 重写 adbkit:原理、架构与搭建实践
  • C语言环境搭建之Linux子系统使用vscode连接子系统
  • Ubuntu filebrowser网盘工具安装
  • 微信社群机器人接口
  • Revit二次开发 钢筋生成API(一)
  • 如何通过Python SDK 删除 Collection
  • 图片大全 - voasem
  • 面试时让你设计一个“朋友圈点赞”功能测试,如何回答才出彩?
  • 乌班图无法登录桌面,只能终端登录用户。且有网拉不了包(DNS问题)
  • 完整教程:云手机的技术架构可分为哪些
  • AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
  • Arkime:大规模开源网络分析与数据包捕获系统
  • get和post如何理解