自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(4)
  • 收藏
  • 关注

原创 # 代码随想录 977. 有序数组的平方

我们不妨思考,将nums中每个数字都进行平方后,整个nums的大小分布应该像一个开口向上的二次函数一样,先递减,后递增 (负数部分递减, 正数部分递增)用i 和 j 两个指针对两端的数字进行比较,谁的平方大就放进去谁,然后再更新指针所指向的位置。原来的数组本身就是按照顺序排好的,需要返回一个由原来数字平方构成的新数组,这个新数组也要求按照飞递减顺序 排序好。此时的时间复杂度为O(n log n) 取决于sort()函数 ,通过本题的速度也是非常快的。双指针法的时间复杂度为O(n) ,空间复杂度为O(n)

2024-04-05 11:41:16 214 1

原创 #代码随想录 34. 在排序数组中查找元素的第一个和最后一个位置

大体与二分查找左闭右闭写法相同,只在最后一个else 部分(nums[middle] == target )做了一个小小的修改, 首先将first 赋值为 middle ,即假定当前的middle 就是第一次出现target的位置。注意,我们搜索的是“开始位置” 即“第一次出现1 的位置” ,搜索的对象不是“1” 而是“第一次出现的1”,这两个对象是不一样的,所以是满足二分查找的条件的。是不相悖的,题目要求我们找出开始位置和结束位置,那么我们可以分开来想,首先找到开始位置,再找到结束位置即可。

2024-04-05 11:25:43 229 1

原创 # 代码随想录 35.搜索插入位置

此时可以分析出,在left 左边的,一定是小于等于target 的部分,在right 右边的,一定是大于等于arget 的部分,这时整个数组就被left和right分割成了两半,所以如果target要按序插入进数组,就直接插入在left的位置就可以了!可以看到,退出while循环的条件是 left

2024-04-04 20:57:51 356 1

原创 #代码随想录 704 二分查找

同理 在更新left 的取值时 由于middle 本身已经包含在区间中, 已经判断过不符合题意了, 故middle + 1 即可 , 但在right 的更新中 , middle 并不包含在right区间里(因为是右开区间)所以在下一次更新中还要再次判断middle是否是目标值 所以使用 right = middle。举例: 第二种写法定义的是左闭右开区间 如 [ left ,right ) 若是小于等于 那么就存在left == right这样一种可能性 但实际上是不合法的。

2024-04-04 17:40:02 405 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除