1. 主持人调度(一)
c
class Solution {
public:
bool hostschedule(vector<vector<int>>& schedule) {
// write code here
sort(schedule.begin(), schedule.end());
int start = -1, end = 0;
for (auto & nums : schedule){
end = nums[0];
if (end < start) return false;
start = nums[1];
}
return true;
}
};
2. 有效三角形的个数
给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
示例 1:
输入: nums = [2,2,3,4]
输出: 3
解释:有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
- 第一步:之类的方法就是先进行排序,先选定一个基准值,这里我们的起始基准值是最后一个也就是nums[nums.size() - 1]
- 第二步:然后给定两个指针,一个指针从开头开始,另一个从基准值的前一个开始。
- 第三步:根据三角形的定理,两边之和大于第三边,这里如果num[left] + nums[right] 的话就符合条件,那么也就是说从left到right之间的的数都是符合条件的,所以这里只需要right--即可,反之left++
c
class Solution {
public:
int triangleNumber(vector<int>& nums) {
// 先进行排序
sort(nums.begin(), nums.end());
int count = 0;
for (int i = nums.size() - 1; i >= 0; i--){
int left = 0, right = i - 1;
while (left < right){
if (nums[left] + nums[right] > nums[i]){
count += right - left;
right--;
}else left++;
}
}
return count;
}
};