0%

insert-interval & length-of-last-word

题目描述

给出一个无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
int vsize = intervals.size();
if (!vsize)return { newInterval };
vector<vector<int>> res;

int i = 0;
while (i<vsize&&intervals[i][1] < newInterval[0])
{
res.push_back(intervals[i]);
i++;
}

int j = i;
if (i<vsize&&intervals[i][0] > newInterval[1])
{
res.push_back(newInterval);
}
else if (i == vsize && intervals[i - 1][1] < newInterval[0])
{
res.push_back(newInterval);
}
else
{
intervals[i][0] = min(intervals[i][0], newInterval[0]);

while (j < vsize&&intervals[j][0] <= newInterval[1])j++;

intervals[i][1] = max(intervals[j - 1][1], newInterval[1]);
res.push_back(intervals[i]);
}

while (j < vsize)
{
res.push_back(intervals[j]);
j++;
}
return res;
}

怎么觉得我的代码像一件缝缝补补的烂衣裳……

不过时间效率还是不错的。

题目描述

给定一个仅包含大小写字母和空格 ‘ ‘ 的字符串 s,返回其最后一个单词的长度。

如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指仅由字母组成、不包含任何空格的 最大子字符串。

题解

用split()函数应该挺快的,不过C++没有。

1
2
3
4
5
6
7
8
int lengthOfLastWord(string s) {
int len = s.length();
while (len>0 && s[len - 1] == ' ')len--;
int i = len - 1;
while (i >= 0 && s[i] != ' ')
i--;
return len - i;
}