中级农民
- 积分
- 124
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-10-7
- 最后登录
- 1970-1-1
|
我的思路。
- class Endpoint{
- int time;
- boolean isend;
- List<Integer> range;
- public Endpoint(int time, List<Integer> range){
- this.time = time;
- isend = false;
- this.range = range;
- }
- }
- class Solution{
- public List<Integer> findMeetingTime(List<List<Integer>> list1, List<List<Integer>> list2, int T){
- List<Integer> res = new ArrayList<>();
- List<Endpoint> list = new ArrayList<>();
- for(List<Integer> ele : list1){
- Endpoint ep1 = new Endpoint(ele.get(0),ele);
- Endpoint ep2 = new Endpoint(ele.get(1),ele);
- ep2.isend = true;
- list.add(ep1);
- list.add(ep2);
- }
- for(List<Integer> ele : list2){
- Endpoint ep1 = new Endpoint(ele.get(0),ele);
- Endpoint ep2 = new Endpoint(ele.get(1),ele);
- ep2.isend = true;
- list.add(ep1);
- list.add(ep2);
- }
- Collections.sort(list, (a, b)->(a.time - b.time));
- int pool = 0;
- Endpoint prev = null;
- for(Endpoint cur : list){
- if(!cur.isend) pool++;
- else{
- pool--;
- }
- if(pool == 2 ){
- int start = Math.max(prev.range.get(0), cur.range.get(0));
- int end = Math.min(prev.range.get(1), cur.range.get(1));
- if(end - start >= T){
- res.add(start);
- res.add(end);
- return res;
- }
- }
- prev = cur;
- }
- return res;
- }
- // follow up K 人:
- K 个人-> pool size == k
- int i = 0;
- while(i < list.size()){
- int pool = 0;
- int endmin = Integer.MAX_VALUE;
- for(int j = 0; j < k; j++){
- if(!list.get(j).isend) pool++;
- else{
- endmin = Math.min(endmin, list.get(j).time);
- pool--;
- }
- if(pool == k){
- res.add(list.get(j).time);
- res.add(endmin);
- return res;
- }
- }
- }
- public static void main(String[] args){
- Solution test = new Solution();
- List<List<Integer>> l1 = new ArrayList<>();
- List<Integer> range = new ArrayList<>();
- range.add(1);range.add(3); l1.add(range);
- range = new ArrayList<>(); range.add(6); range.add(9);l1.add(range);
- range = new ArrayList<>(); range.add(12); range.add(15);l1.add(range);
- List<List<Integer>> l2 = new ArrayList<>();
- range = new ArrayList<>();
- range.add(4);range.add(5); l2.add(range);
- range = new ArrayList<>(); range.add(7);range.add(10); l2.add(range);
- range = new ArrayList<>(); range.add(11);range.add(16); l2.add(range);
- List<Integer> res = test.findMeetingTime(l1, l2, 2);
- System.out.println(res.get(0) + " " + res.get(1));
- }
- }
复制代码 |
|