代码随想录算法训练营第一天 |
您所在的位置:网站首页 › 二分算法的应用 › 代码随想录算法训练营第一天 |
数组理论基础 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 |