代码随想录算法训练营第一天 | 数组理论基础 、 704.二分查找 、27.移除元素
数组理论基础
题目建议 了解一下数组基础,以及数组的内存空间地址,数组也没那么简单。
文章链接
704.二分查找
题目建议熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法。
思路这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件,当大家看到题目描述满足如上条件的时候,可要想一想是不是可以用二分法了
注意问题二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。例如到底是 while(left < right) 还是 while(left <= right),到底是right = middle呢,还是要right = middle - 1呢?
大家写二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。
第一印象看到题目第一时间 想到的是用暴力解法 利用for循环进行解题
学习过程看完代码随想录后发现 利用二分查找法 可以缩短更多的时间
实现困难初步接触二分查找法 先是理解了左闭右闭的写法 但是第一时间没有很好的理解左闭右开的写法 导致在这方面的思考花费了一些时间
收获 在看完视频和文章讲解 并反复推敲代码后 逐步理解了所有的解题思路 初步掌握了二分查找法的精髓 再接再厉 继续坚持!
相关题目推荐 35.搜索插入位置 34.在排序数组中查找元素的第一个和最后一个位置 69.x 的平方根 367.有效的完全平方数
27.移除元素
题目建议熟悉 双指针法
思路要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
双指针法时间复杂度:O(n) 空间复杂度: O(1)。
双循环暴力解法时间复杂度: O(n^2) 空间复杂度: O(1)。
第一印象没太有思路 双循环 也不能很好的写出来
学习过程看完代码随想录后发现 双指针法非常的神奇 ,并且大大缩短了代码运行时间
收获 在看完视频和文章讲解 并反复推敲代码后 逐步理解了所有的解题思路 初步掌握了双指针法的精髓 希望能将其应用到更多方面 再接再厉 继续坚持!
相关题目推荐 26.删除排序数组中的重复项 283.移动零 844.比较含退格的字符串 977.有序数组的平方
总结
今天总共用了大约两个小时的时间 完成了对视频和文章的学习 并且自己手动敲写了 两个题目的代码 今天整体难度较为简单
自身基础比较差,希望能通过学习 进行完善。