代码随想录第1天

代码随想录的第一天,主题是数组相关。因为之前有跟着代码随想录刷过一阵的题,因此这个刷题顺序无比熟悉。

第一天的题目是:207:二分查找;27:删除元素

今天的节奏比较快,因为是简单题并且之前已经刷过了。虽然解法忘记了,但是稍微看了下卡哥的解答,很容易就回忆了起来。

207:二分查找

题目描述:

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

示例:

输入: nums = [-1,0,3,5,9,12], target = 9

输出: 4

解释: 9 出现在 nums 中并且下标为 4

题目要点:

1. 有序的数组 2. 元素不重复

解题思路:

方法一:左闭右闭集合。将 target 属于集合[left, right].

如果使用这种方法就要注意条件的设置是while(left <= right)。

方法二:左闭右开集合。也就是说 target 属于[left, right).

如果使用这种方法就要注意条件的设置是while(left < right)。

个人易错点:

1. 注意题目是要返回数组的元素值还是元素下标。

2. 注意left +(right-left)/2和(left+right)/2的区别:前者不会内存溢出;后者一旦 left 或者 right 都超过 int 最大值的一半时,相加就会溢出。

27:移除元素

题目描述:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例:

输入:nums = [3,2,2,3], val = 3

输出:2, nums = [2,2]

解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

解题思路:

方法 一:暴力破解

设定 i 和 j两个整型变量,i 用来遍历数组;j 用来更新数组。找到与 val 相同的元素,就把后一位的元素全部往前移。

方法 二:快慢指针

设定 slowIndex 和 fastIndex 两个整型变量作为指针。fastIndex 用来遍历元素,并与 val 比较。如果 与 val 不相同的元素产生,则利用 slowIndex 进行储存并计数。最后返回 slowIndex。

个人易错点:

1. 数组的元素不能删除,只能覆盖。

2.注意比较两种方法的时间/空间复杂度。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容