上一页 1 ··· 16 17 18 19 20
摘要: 这题和第54题类似,都是套一个搜索的模板。 用dx和dy表示方向,方向的顺序是先向右,再向下,再向左,再向上,再向右。。。 如果“撞墙”了就需要改变到下一个方向。“撞墙”的判定就是(newX, newY)越界或者已经被访问过。 “撞墙”就需要改变方向,即更新(newX, newY)。 class S 阅读全文
posted @ 2020-06-27 00:47 machine_gun_lin 阅读(54) 评论(0) 推荐(0)
摘要: 翻转整个字符串,再用双指针分隔出第一个单词。 注意左指针要先过滤掉前缀的空格,右指针从左指针的位置开始逐渐增加,直到右指针指向空格。 第一个单词的长度就是左右指针的距离之差。 class Solution { public: int lengthOfLastWord(string s) { if(s 阅读全文
posted @ 2020-06-27 00:32 machine_gun_lin 阅读(73) 评论(0) 推荐(0)
摘要: 对于新插入的区间newInterval,原区间列表intervals可以分为三个部分: 左边与newInterval不重合的区间,这些区间直接加入结果数组中; 中间与newInterval重合的区间,我们需要更新newInterval的左右端点,使得左右端点分别为重合部分的最左和最右; 右边与new 阅读全文
posted @ 2020-06-27 00:21 machine_gun_lin 阅读(38) 评论(0) 推荐(0)
摘要: 先把区间按照左端点排序,这样排完序之后的列表中的可以合并的区间就都是连续的了。 将列表中第一个区间(最左的区间)加入到结果数组res中,并按顺序依次考虑之后的每个区间: 如果当前区间的左端点大于res数组末尾区间的右端点,则当前区间去前面的区间不重合,直接将这个区间加入res数组中; 否则,表示当前 阅读全文
posted @ 2020-06-26 23:30 machine_gun_lin 阅读(34) 评论(0) 推荐(0)
摘要: 这题是典型的贪心。 我们用一个变量canReach表示最远能到达的距离,canReach的初始值为0。 遍历数组,当遍历到位置x时,如果x小于等于canReach,说明当前位置可以从起点经过若干步跳跃到达, 因此我们可以用canReach = max(canReach, x + nums[x])更新 阅读全文
posted @ 2020-06-26 22:49 machine_gun_lin 阅读(27) 评论(0) 推荐(0)
摘要: 题意是,输入一个二维数组,从数组左上角开始,沿着顺时针慢慢地“遍历”每一个元素且每一个元素只遍历一次, 在一个新的一维数组中记录遍历的顺序,最终的返回值就是这个数组。 思路:可以考虑用方向来模拟“一个指针的移动”,指针指向的元素如果合法(不越界且未被访问过),就将这个元素压入结果数组。 这里的核心是 阅读全文
posted @ 2020-06-26 19:15 machine_gun_lin 阅读(65) 评论(0) 推荐(0)
摘要: 要求一个最大子序和,思路是:假设每个以第i个元素结尾的子数组的最大值为f(i),那么我们要求的最大子序和就是遍历所有的i, 得到以i结尾的最大的f(i), 显然f(i) = max{f(i - 1), nums[i]},也就是说以第i个元素结尾的子数组的最大值为 以第i-1元素结尾的子数组的最大值加 阅读全文
posted @ 2020-06-26 18:43 machine_gun_lin 阅读(22) 评论(0) 推荐(0)
上一页 1 ··· 16 17 18 19 20