0
点赞
收藏
分享

微信扫一扫

getcap提权后,无法生效引用动态库的解决办法

影子喵喵喵 03-29 22:00 阅读 2

面试题74:

面试题74

问题:

​ 输入一个区间的集合,将重叠的区间合并。

解决方案:

​ 先将所有区间按照起始位置排序,然后比较相邻两个区间的结束位置就能知道它们是否重叠。如果它们重叠就将它们合并,然后判断合并的区间是否和下一个区间重叠。重复这个过程,直到所有重叠区间都合并为止。

源代码:
class Solution {
    public int[][] merge(int[][] intervals) {
    	//按照起始位置排序
        Arrays.sort(intervals,(i1,i2) -> i1[0] - i2[0]);

        List<int[]> list = new ArrayList<>();
        int i = 0;
        while(i < intervals.length){
        	//前区间
            int[] temp = new int[]{intervals[i][0],intervals[i][1]};
            int j = i + 1;
            //判断是否存在后区间,存在则判断后区间起始位置是否小于或等于前区间的终止位置
            while(j < intervals.length && intervals[j][0] <= temp[1]){
            	//重叠区间的终止位置由前区间和后区间的终止位置的最大值决定
                temp[1] = Math.max(intervals[j][1],temp[1]);
                j++;
            }

            list.add(temp);
            i = j;
        }

        int[][] result = new int[list.size()][];
        return list.toArray(result);
    }
}

面试题75:

面试题75

问题:

​ 输入两个数组arr1和arr2,将数组arr1中的数字按照数组arr2中的数字的相对顺序排序。如果数组arr1中的数字在arr2中没有出现,那么将这些数字按递归的顺序排在后面。

解决方案:

​ 使用计数排序。先统计arr1中的每个整数在数组中出现的次数记为counts,然后按照arr2的顺序将每个整数按照它出现的次数填入到数组中,扫描完arr2数组后,继续扫描counts数组,如果counts数组中出现整数出现次数不为0时,将每个整数按照它出现的次数填入到arr2数组中。

源代码:
class Solution {
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[] counts = new int[1001];
        for(int num:arr1){
            counts[num]++;
        }

        int i = 0;
        //扫描arr2数组
        for(int num:arr2){
            while(counts[num] > 0){
                arr1[i++] = num;
                counts[num]--;
            }
        }
		//扫描counts数组
        for(int num = 0;num < counts.length;num++){
            while(counts[num] > 0){
                arr1[i++] = num;
                counts[num]--;
            }
        }

        return arr1;
    }
}
举报

相关推荐

0 条评论