题目描述:646. 最长数对链 - 力扣(LeetCode)
这是一道典型的贪心算法题,我们先对原数对进行排序,排序规则是按照数对的右边界值的大小进行升序排列。初始化变量end为升序后第一个数对的右边界值,这个数无疑是最小的右边界,之后依次遍历整个数对,出现左边界大于end就更新end值与最长数对值,这样能够取到的数对长度才有可能最长。
C语言代码如下:
static int compare(const void * a, const void * b)
{
return ((*(int **)a)[1] - (*(int **)b)[1]);
}
int findLongestChain(int** pairs, int pairsSize, int* pairsColSize)
{
qsort(pairs, pairsSize, sizeof(int *), compare);
int longestsize = 1;
int end = pairs[0][1];
for (int i = 1; i < pairsSize; i++) {
if (end < pairs[i][0]) {
end = pairs[i][1];
longestsize++;
}
}
return longestsize;
}