2020年4月16日

今日算法題 56. 合併區間

給出一個區間的集合,請合併所有重疊的區間。

示例 1:

輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併爲 [1,6].

示例 2:

輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視爲重疊區間。

題解:

 public int[][] merge(int[][] intervals) {
        if(intervals.length == 0){
			return intervals;
		}
		/**
		 * 1.排序將數組中按照左端點進行升序排列
		 * 2.循環遍歷數組,如果數組中的右端大於temp的右端,則更新temp
		 */
		Arrays.sort(intervals,(a,b)->a[0] - b[0]);
		List<int[]> list = new ArrayList<>();
		int[] temp = intervals[0];
		for (int i = 1; i < intervals.length ; i++) {
			if(intervals[i][0] > temp[1] ){
				list.add(temp);
				temp = intervals[i];
			}else{
				temp[1] = Math.max(intervals[i][1],temp[1]);
			}
		}
		list.add(temp);
		int[][] res = new int[list.size()][2];
		list.toArray(res);
		return res;
    }

java面試題
35. 並行和併發有什麼區別?
並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔發生
並行是在不同實體上的多個事件,併發是在同一實體上的多個事件。
在一臺處理器上“同時”處理多個任務,在多臺處理器上同時處理多個任務。如hadoop分佈式集羣。
所以併發編程的目標是充分的利用處理器的每一個核,以達到最高的處理性能。
36. 線程和進程的區別?
簡而言之,進程是程序運行和資源分配的基本單位,一個程序至少有一個進程,一個進程至少有一個線程。進程在執行過程中擁有獨立的內存單元,而多個線程共享內存資源,減少切換次數,從而效率更高。線程是進程的一個實體,是cpu調度和分派的基本單位,是比程序更小的能獨立運行的基本單位。同一進程中的多個線程之間可以併發執行。
37. 守護線程是什麼?
守護線程(即daemon thread),是個服務線程,準確地來說就是服務其他的線程。
38. 創建線程有哪幾種方式?

  • 繼承Thread類創建線程類
    定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了線程要完成的任務。因此把run()方法稱爲執行體。
    創建Thread子類的實例,即創建了線程對象。
    調用線程對象的start()方法來啓動該線程。
  • 實現Runnable接口創建線程類
    定義runnable接口的實現類,並重寫該接口的run()方法,該run()方法的方法體同樣是該線程的線程執行體。
    創建 Runnable實現類的實例,並依此實例作爲Thread的target來創建Thread對象,該Thread對象纔是真正的線程對象
    調用線程對象的start()方法來啓動該線程。
  • 通過Callable和Future創建線程
    創建Callable接口的實現類,並實現call()方法,該call()方法將作爲線程執行體,並且有返回值。
    創建Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值
    使用FutureTask對象作爲Thread對象的target創建並啓動新線程。
    調用FutureTask對象的get()方法來獲得子線程執行結束後的返回值。
  1. 說一下 runnable 和 callable 有什麼區別?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章