回覆列表
-
1 # 宋運奎
-
2 # 程式設計師遇見更好的自己
使用二分法,先對數進行排序,然後取最中間的數,如果中間數小於取數範圍的最小值則小於中間值的值放棄,對大於中間範圍的值再使用二分法,依次比較。
以下是不限制次數的比較:
使用java回答這個問題
// 假設有以下資料1,4,2,6,3,5把這些放到list中
List<Integer> oldList = new ArrayList<Integer>();
oldList.add(1);
oldList.add(4);
oldList.add(2);
oldList.add(6);
oldList.add(3);
oldList.add(5);
// 定義接收結果的資料
List<Integer> newList = new ArrayList<Integer>();
/** 假設取3到6的資料,我們使用兩種方法. */
// 1、使用for迴圈
for (int i = 0 ;i< oldList.size();i++) {
if (oldList.get(i) >= 3 && oldList.get(i) <= 6) {
newList.add(oldList.get(i));
}
}
// 2、lambda表示式,使用filter過濾
newList = oldList.stream().filter((e) -> (e >= 3 && e<=6)
).collect(Collectors.toList());
首先對n個數據進行排序(從小到大)。
然後確定查詢資料的範圍最小值,與最大值。
最後從n個已排序好的資料裡基於查詢範圍的最小值開始,截止最大值結束。