题目描述 给出一个无重叠的 , 按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
题解 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; }