日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Algs4-1.4.18数组的局部最小元素

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Algs4-1.4.18数组的局部最小元素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.4.18數組的局部最小元素。編寫一個程序,給定一個含有N個不同整數的數組,找到一個局部最小元素:滿足a[i]<a[i-1],且a[i]<a[i+1]的索引i。程序在最壞情況下所需的比較次數為~2lgN。
答:檢查數組的中間值a[N/2]以及和它相鄰的元素a[N/2-1]和a[N/2+1]。如果a[N/2]是一個局部最小值則算法終止;否則則在較小的相鄰元素的半邊中繼續查找。

說明:按照上面的提示寫出下面的代碼不能將這個排列中的局部最小找出來。排列:7? 6? 9? 5? 4? 3? 2? 1 中的6找不出來。
public class E1d4d18
{
??? public static int min(int[] a)
??? {
??????? int lo=1;
??????? int hi=a.length-1;
??????? int mid;
??????? while(lo<hi)
??????? {
??????????? mid=(lo+hi)/2;
???????????? if(mid-1>=0 && a[mid-1]<a[mid])
??????????????? hi=mid-1;
??????????? else if(mid+1<a.length && a[mid]>a[mid+1])
??????????????? lo=mid+1;
??????????? else
??????????????? return mid;
??????? }
??????? return -1;
??? }
???
??? public static void main(String[] args)
??? {
????? int[] a=In.readInts(args[0]);
????? StdOut.println(min(a));
??? }
}

按照下面版本的代碼可以避免上述問題,算法是選從mid-1與mid+1中較小的一邊找,找不到時再從mid-1與mid+1中較大的一邊找。
public class E1d4d18
{
??? public static int min(int[] a)
??? {
??????? int lo=1;
??????? int hi=a.length-2;
??????? int mid;
??????? int localMinIndex=-1;
??????? //find in rang smaller
????? while(lo<=hi && localMinIndex==-1)
??????? {
??????????? mid=(lo+hi)/2;
??????????? if(a[mid]<a[mid-1] && a[mid]<a[mid+1])
??????????????? localMinIndex=mid;
??????????? else if(a[mid-1]<a[mid+1])
??????????????? hi=mid-1;
??????????? else if(a[mid-1]>a[mid+1])
??????????????? lo=mid+1;
??????? }
?????? //
????? lo=1;
????? hi=a.length-2;
????? while(lo<=hi && localMinIndex==-1)
????? {
????????? mid=(lo+hi)/2;
????????? if(a[mid]<a[mid-1] && a[mid]<a[mid+1])
????????????? localMinIndex=mid;
????????? else if(a[mid-1]<a[mid+1])
????????????? lo=mid+1;
????????? else if(a[mid-1]>a[mid+1])
????????????? hi=mid-1;
????? }
????? return localMinIndex;
??? }//end min
??? public static void main(String[] args)
??? {
????? int[] a=In.readInts(args[0]);
????? StdOut.println(min(a));
??? }
}

轉載于:https://www.cnblogs.com/longjin2018/p/9854443.html

總結

以上是生活随笔為你收集整理的Algs4-1.4.18数组的局部最小元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。