代码随想录算法训练营第一天

您所在的位置:网站首页 二分算法的应用 代码随想录算法训练营第一天

代码随想录算法训练营第一天

2023-03-18 21:51| 来源: 网络整理| 查看: 265

数组理论基础

array和vector,数组三者区别和联系

这三者的内存都是连续的,可以通过下标索引来进行访问。

二维数组的内存地址也是连续的。

与数组相比,array和vector更为安全,需要注意的是array不能添加或者删除元素。

704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

https://leetcode.cn/problems/binary-search/

对本题的理解是先找到二分后的中间元素,与目标值比较,来确定移动左边界or右边界。

第一版:

反思:

我这里的循环判断条件是用的二分法计算次数,每次x2,更明确的做法是判断left和right的关系在判断了target和nums[m]的关系之后,左右区间不应该再包含m了,已经判断过了r=length有越界风险

二分法需要注意区间定义是左闭右闭,还是左闭右开。这个会影响到二分法边界条件的处理,比如说是left

27. 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

https://leetcode.cn/problems/remove-element

这个题没写出来,想用一前一后双指针做元素互换,但是想不明白怎么处理vector中全是val值的情况。

暴力做法O(n2),两层循环,每次找到一个val,就把后面的元素向前移动一次。

解析版:快慢指针

两个指针都从下标0的位置出发,快指针用于寻找新数组中要存储的数,慢指针对应新数组的下标。

通过快慢指针,把一个两层循环简化到一个for循环就能够实现。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3