Facebook面试题:Sort partial Array
来源:互联网 发布:windows代表什么 编辑:程序博客网 时间:2024/06/06 12:37
package com.Facebook;import java.util.ArrayList;import java.util.Comparator;import java.util.PriorityQueue;/** * Created by hongruzh on 10/5/16. * 改程序的大体思想就是 * 1. 创建一个对象arrayPair,遍历数组,将每一个segment array(即从小到大的一个片段加入到堆里面,start是起始点,end是结束点)加入到小顶堆里面 * 2. 每次poll出堆顶元素,nums[pq.poll().start]就是当前未排序的元素最小的一个 * 3. poll出的arrayPair必须去除start节点,重新构造一个新的array Pair加入到堆里面去 * 4. 时间复杂度是O(logm) m是树的高度 */public class SortPartialArray { public int[] mergeKSortedArraySegment(int[] nums){ int n = nums.length; if(n<=1) return nums; int start = 0; ArrayList<arrayPair> list = new ArrayList<arrayPair>(); for(int i=1;i<n;i++){ if(nums[i]<nums[i-1]){ list.add(new arrayPair(start,i)); start = i; } } list.add(new arrayPair(start,n)); if(list.size()==1) return nums;//如果segment只有一个的话,就返回原数组 // 1,3,5,4,7,9,8,10,12 PriorityQueue<arrayPair> pq = new PriorityQueue<arrayPair>(new Comparator<arrayPair>() { @Override public int compare(arrayPair o1, arrayPair o2) { return nums[o1.start]-nums[o2.start];//重新写比较器方法,每次是按照arrayPair前一个的nums[start]的大小来排序 } }); for(int i=0;i<list.size();i++){ pq.offer(list.get(i)); } System.out.println(pq.size()); int[] result = new int[n];//构造结果集 int i = 0; while(!pq.isEmpty()){ arrayPair segment = pq.poll(); int segmentStart = segment.start;//当时犯了一个愚蠢错误,居然写成了 pq.poll().start,这样的话,不就是把元素给poll出去了吗 int segmentEnd = segment.end;// System.out.println(segment.start); result[i++] = nums[segment.start]; if(segment.addNumberStart(segmentStart, segmentEnd)!=null){//当start = end的时候。这时候创建的segment其实是为null的 //具体见arrayPair里面的方法,所以只有不为空话,才重新构造一个segment加到堆里面去 pq.offer(segment.addNumberStart(segmentStart, segmentEnd)); } } return result; } class arrayPair{ int start; int end; public arrayPair(int start,int end){ this.start = start; this.end = end; } public arrayPair addNumberStart(int start,int end){ if(start+1<end){ return new arrayPair(start+1,end); } else return null; } }}
0 0
- Facebook面试题:Sort partial Array
- Facebook面试题 Suffix array sorting
- Facebook面试题 Remove duplicates from array where all duplicate numbers are located adjacently
- Facebook面试题 find the peek or valley index in an array
- Facebook面试题 Moving positive, negative and zeros in an array
- Facebook面试题:Task Schedule
- 代码面试题:Sort Letter
- MicroSoft Google Facebook 面试题 系列一
- [Facebook 面试题]Meeting roomII 变形题
- Facebook 面试题 Binary tree inorder successor
- Facebook面试题 Remove unclosed parenthesis
- leetcode facebook面试题71.Simplify Path
- Facebook 面试题 | 岛的周长
- 代码面试题:Partition Array
- 【面经】Facebook最新面试题-Edit Distance变形
- LeetCode 10 Regular Expression Matching FaceBook面试题
- Facebook 2016 面试题1 | 递增三元组子序列
- leetcode facebook 面试题 Merge two interval lists
- C++学习日记
- Java 集合源码解析(1):Iterator
- C/C++ 和 Java 命令行绘制心形图案
- 深度学习历程回顾
- 5543
- Facebook面试题:Sort partial Array
- 1004-Let the Balloon Rise
- viewpager+滑动条
- 经常读错的单词,你读对了吗
- 记录几次内存泄露问题
- maven学习2-建立Java工程
- 在Ubunut12.04上搭建TFTP和NFS服务器
- -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a
- 1006-Tick and Tick