LeetCode 56 Merge Intervals
2016-03-29 16:50
323 查看
题意:给出n个区间,合并重复的区间。
思路:对所有区间排序,从左到右扫一遍,记录当前所能达到的最左端和最右端。
注意因为cmp函数写在类中,会默认带一个参数this指针指向当前对象,这就和要求的cmp比较函数多了一个参数,所以可以把cmp函数改为静态的。
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool cmp(const Interval& A, const Interval& B) {
return A.start == B.start ? A.end < B.end : A.start < B.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> ans;
sort(intervals.begin(), intervals.end(), cmp);
if (intervals.empty())
return ans;
int l = intervals[0].start, r = intervals[0].end;
for (int i = 0; i < intervals.size(); i++) {
if (intervals[i].start <= r)
r = max(r, intervals[i].end);
else {
ans.push_back(Interval(l, r));
l = intervals[i].start;
r = intervals[i].end;
}
}
ans.push_back(Interval(l, r));
return ans;
}
};
思路:对所有区间排序,从左到右扫一遍,记录当前所能达到的最左端和最右端。
注意因为cmp函数写在类中,会默认带一个参数this指针指向当前对象,这就和要求的cmp比较函数多了一个参数,所以可以把cmp函数改为静态的。
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool cmp(const Interval& A, const Interval& B) {
return A.start == B.start ? A.end < B.end : A.start < B.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> ans;
sort(intervals.begin(), intervals.end(), cmp);
if (intervals.empty())
return ans;
int l = intervals[0].start, r = intervals[0].end;
for (int i = 0; i < intervals.size(); i++) {
if (intervals[i].start <= r)
r = max(r, intervals[i].end);
else {
ans.push_back(Interval(l, r));
l = intervals[i].start;
r = intervals[i].end;
}
}
ans.push_back(Interval(l, r));
return ans;
}
};
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解