[七日打卡]之第四卡:实现strStr()、搜索插入位置、最大子序和

186 阅读2分钟

实现strStr()

思路:

首先判断needle是否为空字符串,如果是的空字符串,返回0。

其次,需要注意的是needle的长度是否大于haystack的长度,如果大于,那needle肯定不在haystack中。

正常情况下,我们需要对比needle的首字母与haystack的每一个字符,比如在haystack下标i处相等,需要对比needle第二个字符与haystack下标为i+1的字符是否相等

如果相等则比较下一个,直到比较完。如果不相等,则比较haystack下标为i+1的字符与needle首字母是否相等。

需要注意的是在循环比较haystack字符串时,只能从0~(haystack.length-needle.length+1)。


搜索插入位置

思路:

题目可以使用二分查找的方法,其实与在排序数组中找出某个元素的操作一致,只不过这道题是找出下标位置。首先取出数组的头、尾及中间元素的下标,比较中间元素与目标值的大小。

如果中间元素大于目标值,则将尾部下标移到中间下标-1处。

如果中间元素小于目标值,则将头部下标移到中间下标+1处。

操作过程中,保证头部下标要始终小于等于尾部下标。


最大子序和

思路:

定义一个变量pre表示之前所有数字的和,在遍历时,如果pre小于0,则将pre重新赋值为当前元素。如果pre大于0,则pre=pre+当前元素。

同时,定义一个变量max表示最大值,每次循环后,比较max与pre,取出最大值。

这道题还有分治的解法,留到明天好好学习吧!