分治演算法
/** * 問題描述:一個袋子有一堆硬幣其中一枚是假幣,並且假幣和真幣一模一樣,肉眼很難分辨,目前只知道假幣比真幣重量輕一點,請問如何區分出假幣呢? */ static int FastCoin(int[] coin, int low , int high){ int num1,num2;//num1求出前半部分的總和,num2求出後半部分的總和 int re = 0;//記錄最小值得位置 num1 = num2 = 0; //*******************************下面的判斷是遞迴的終止條件 if(low + 1 == high){//當索引low和high相鄰,就是兩者中的一個 if(coin[low] > coin[high]){ re = high + 1;//這裡coin陣列是從0開始所以要+1,下面同理 return re; }else if(coin[low] < coin[high]){ re = low + 1; return re; }else{}//當相等的時候就說明此陣列中的元素都一樣 } //*******************************coin數量為偶數 if((high - low + 1)%2 == 0){//coin的數量為偶數 for(int i = low; i<=low+(high - low)/2; i++){//前半部分 num1 = num1 + coin[i]; } for(int i = low + (high - low)/2 + 1; i<=high ; i++){//後半部分 num2 = num2 + coin[i]; } //進行判斷 if(num1 > num2){//可知最小值在後半部分 re = FastCoin(coin, low+(high - low)/2+1,high); return re; }else if(num1 < num2){//可知最小值在前半部分 re = FastCoin(coin, low, low+(high - low)/2); return re; }else{}//如果相等則說明沒有小值 //*******************************coin的數量為奇數 }else{//coin的數量為奇數 for(int i = low; i<=low+(high-low)/2-1; i++){//前半部分 num1 = num1 + coin[i]; } for(int i = low+(high-low)/2+1; i<=high; i++){//後半部分 num2 = num2 + coin[i]; } if(num1 > num2){//可知最小值在後半部分 re = FastCoin(coin, low+(high-low)/2+1, high); return re; }else if(num1 < num2){//可知在前半部分 re = FastCoin(coin, low, low+(high-low)/2-1); return re; }else{ re = low+(high-low)/2+1; return re; } } return re; } public static void main(String[] args) { int[] coin = new int[]{3,3,3,3,3,2,3,3,3,3}; System.out.println(FastCoin(coin, 0, 9)); }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2816607/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 演算法學習-CDQ分治演算法
- [演算法] 一些分治演算法
- 分治演算法-骨牌鋪方格演算法
- 遞迴 & 分治演算法深度理解遞迴演算法
- 【演算法】分治四步走演算法
- 分治演算法-眾數問題演算法
- 從分治演算法到 Hadoop MapReduce演算法Hadoop
- 遞迴與分治演算法練習遞迴演算法
- 樹分治 - 點分治
- 五大常用演算法:一文搞懂分治演算法演算法
- 【五大常用演算法】一文搞懂分治演算法演算法
- 分治演算法基本原理和實踐演算法
- 分治演算法-求解棋盤覆蓋問題演算法
- 搞定面試演算法系列 —— 分治演算法三步走面試演算法
- 分治
- 【20190326】【每天一道演算法題】求眾數(分治演算法)演算法
- Note - 樹分治(點分治、點分樹)
- 洛谷題單 演算法2-3 分治與倍增演算法
- 《演算法》系列—大白話聊分治、回溯,手撕八皇后演算法
- 演算法學習筆記-暴力搜尋和分治法演算法筆記
- 演算法:利用分治演算法求解N個元素中的第M大元素演算法
- CDQ分治
- 分治合集
- 分治法
- 點分治
- 演算法與資料結構基礎 - 分治法(Divide and Conquer)演算法資料結構IDE
- 歸併分治
- 根號分治
- 分治—快速排序排序
- 「演算法思想」分治、動態規劃、回溯、貪心一鍋燉演算法動態規劃
- 以猜數字遊戲引出的分治演算法的理解與思考遊戲演算法
- D-CDQ分治
- 靜態點分治
- 分治FFT小記?FFT
- 【2024-ZR-C Day 5】資料結構(3):莫隊(帶修莫隊、回滾莫隊)、邊分治、點分治、樹分治、動態點分治資料結構
- 分治法演算法學習(一)——歸併排序、求最大子陣列和演算法排序陣列
- 計算機演算法設計與分析筆記(二)——遞迴與分治計算機演算法筆記遞迴
- Python 一網打盡<排序演算法>之從希爾排序演算法的分治哲學開始Python排序演算法