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

数组理论基础

    第一题:代码随想录算法训练记录 --- 第一天_第1张图片

 本题是一个典型的二分查找模板题,重点是对二分查找的理解

我本人的解题方法(可以说是和左闭右闭差不多)

 代码随想录算法训练记录 --- 第一天_第2张图片

一个递归版的二分查找法,不过消耗资源较其他方法较多

时间复杂度:O(logn)   空间复杂度:O(1)

二分的第二种解题方法(左闭右开)

代码随想录算法训练记录 --- 第一天_第3张图片

这种方法和左闭右闭的区别在于右侧right区间的确定,左闭右闭的right区间当left == right时有意义

而左闭右开的区间left == right 时是无意义的。

第二题:

代码随想录算法训练记录 --- 第一天_第4张图片

第二题是对vector的一个推理,在这里我刚开始想的是有两个指针一个从前面遍历(这里命名为前指针),一个从后面遍历(这里命名为后指针)。和快排前面差不多,第一个指针开始遍历当

前指针所指项等于val,将前指针所指项与后指针所指项调用swap()函数进行交换。然后后指针同时向前遍历当后指针所指项与val相等,向前移动,直到所指项不等于val,然后与前指针遍历后的所指向交换。需要注意的一点是其中,有几个特殊情况:

    1.当数组为空时

    2.数组的size为1时

    3.数组的size为2时

    4.数组遍历结束后,会有val值在后指针的前面,需要再遍历一次

   5.数组遍历时会有,遍历时前后指针所指都为val值,需要重新再交换一次(编程时结构所导致)

代码随想录算法训练记录 --- 第一天_第5张图片代码随想录算法训练记录 --- 第一天_第6张图片

这个方法也是很麻烦,而且消耗资源还多。后来,代码优化后

代码随想录算法训练记录 --- 第一天_第7张图片

思路一样,但是代码实现方法真的差好多,我那个有点复杂了。

其次,还有一种双指针方法,是两个指针从前面开始遍历代码随想录算法训练记录 --- 第一天_第8张图片

当fast指针和slow指针开始遍历时,slow指针遇到等于val的项停下,然后fast指针向后继续遍历

遇到不等于val的值与slow指针进行交换以此类推。

最后,还有一种暴力解决方法

 就是两层for循环,一层用于遍历数组,一组用于将树组后面的值向前推进。在此,就不做演示了。

总结 :

  第一天感觉还可以,就是自己的代码实现有点复杂,总是把问题想复杂。

   

你可能感兴趣的:(算法)