標籤:style blog color java for ar 代碼 div
代碼:
import java.util.ArrayList;import java.util.List;public class Bit { int max; int min; int[] arr; public Bit(int[] arrInput) { // 找出極值 for (int i = 0; i < arrInput.length; i++) { if (max < arrInput[i]) { max = arrInput[i]; } if (min > arrInput[i]) { min = arrInput[i]; } } // 建立數組 arr = new int[max - min + 1]; // 數組插值 for (int i : arrInput) { int index = i - min; arr[index]++; } } public boolean hasDuplicateItem() { for (int i = 0; i < arr.length; i++) { int value = arr[i]; if (value > 1) { return true; } } return false; } public List<Integer> getSortedList() { List<Integer> ls = new ArrayList<Integer>(); for (int i = 0; i < arr.length; i++) { int value = arr[i]; if (value != 0) { for (int j = 0; j < value; j++) { ls.add(min + i); } } } return ls; } public List<Integer> getUniqueSortedList() { List<Integer> ls = new ArrayList<Integer>(); for (int i = 0; i < arr.length; i++) { int value = arr[i]; if (value != 0) { ls.add(min + i); } } return ls; } public int[] getUniqueSortedArray(){ List<Integer> ls=getUniqueSortedList(); int[] arr=new int[ls.size()]; for(int i=0;i<arr.length;i++){ arr[i]=ls.get(i); } return arr; } /** * 二分尋找 * * @param sortedArray * 已排序的欲尋找的數組 * @param seachValue * 尋找的值 * @return 找到的元素下標,若找不到則返回-1 */ public static int binSearch(int[] sortedArray, int seachValue) { // 左邊界 int leftBound = 0; // 右邊界 int rightBound = sortedArray.length - 1; // 當前下標位置 int curr; while (true) { // 定位在左邊界和右邊界中間 curr = (leftBound + rightBound) / 2; if (sortedArray[curr] == seachValue) { // 找到值 return curr; } else if (leftBound > rightBound) { // 左邊界大於右邊界,已經找不到值 return -1; } else { if (sortedArray[curr] < seachValue) { // 噹噹前下標對應的值小於尋找的值時,縮短左邊界 leftBound = curr + 1; } else { // 噹噹前下標對應的值大於尋找的值時,縮短右邊界 rightBound = curr - 1; } } } } public static void main(String[] args) { int[] arr = { -2, -1, 3, 5, 7, 9, 30, 4, -2, 5, 8, 3 }; Bit b = new Bit(arr); System.out.println("排序後數組"); int[] arr2=b.getUniqueSortedArray(); for(int i=0;i<arr2.length;i++){ System.out.println(i+":"+arr2[i]); } int[] arr3={2,5,7,-2,90}; for(int i=0;i<arr3.length;i++){ int index=Bit.binSearch(arr2, arr3[i]); if(index!=-1){ System.out.println(arr3[i]+"排在數組arr2的第"+index+"個"); }else{ System.out.println(arr3[i]+"不在數組arr2中"); } } }}
輸出:
排序後數組0:-21:-12:33:44:55:76:87:98:302不在數組arr2中5排在數組arr2的第4個7排在數組arr2的第5個-2排在數組arr2的第0個90不在數組arr2中