leetcode

来源:互联网 发布:龙神契约武神进阶数据 编辑:程序博客网 时间:2024/06/16 21:09

題目

You are given n pairs of numbers. In every pair, the first number is always smaller than the second number.

Now, we define a pair (c, d) can follow another pair(a, b) if and only ifb < c. Chain of pairs can be formed in this fashion.

Given a set of pairs, find the length longest chain which can be formed. You needn't use up all the given pairs. You can select pairs in any order.

Example 1:

Input: [[1,2], [2,3], [3,4]]Output: 2Explanation: The longest chain is [1,2] -> [3,4]

Note:

  1. The number of given pairs will be in the range [1, 1000].

分析及解答

  • 调试】当出现数组指针越界的时候,分清是下标大了还是小了,如果大了,寻找所有让下标上升的地方进行检查。
  • 快排】引入快排后,在leetcode上排名效率前1%。

// 经典题目(任务分配,贪心算法)public class FindLongestChain {    public int findLongestChain(int[][] pairs) {        if(pairs == null || pairs.length == 0){        return 0;        }        qsort(pairs,0,pairs.length-1);        int result = 1;        int lastEnd = pairs[0][1];        for(int i = 1;i < pairs.length;i++){        if(pairs[i][0] > lastEnd){        result ++;        lastEnd = pairs[i][1];         }        }        return result;    }    // 快排。    public void qsort(int[][] pairs,int start ,int end){    if(start >= end ){    return ;    }    int mid = rangeSort(pairs, start, end);    qsort(pairs, start, mid-1);    qsort(pairs, mid+1, end);        }        public int rangeSort(int[][] pairs,int start,int end){    int p1 = start,p2 = end;    int[] tmp = new int[2];    tmp[0] = pairs[start][0];    tmp[1] = pairs[start][1];    while(p1 < p2){    while(p1 < p2 && pairs[p2][1] > tmp[1]){    p2--;    }    if(p1 < p2){    pairs[p1][0] = pairs[p2][0];    pairs[p1][1] = pairs[p2][1];    p1++;    }        while(p1 < p2 && pairs[p1][1] <= tmp[1]){    p1++;    }    if(p1 < p2){    pairs[p2][0] = pairs[p1][0];    pairs[p2][1] = pairs[p1][1];     p2--;    }        }    pairs[p1][0] = tmp[0];pairs[p1][1] = tmp[1];    return p1;    }        public static void main(String[] args) {FindLongestChain flc = new FindLongestChain();int[][] data ={{-10,-8},{8,9},{-5,0},{6,10},{-6,-4},{1,7},{9,10},{-4,7}};flc.findLongestChain(data);System.out.println("end");}}


原创粉丝点击