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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450376.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

編程技能和做員工的技能——哪個更重要?

摘要&#xff1a;不管我們程序員如何認識這個問題&#xff0c;如果你想在給別人編程打工中獲得事業成功&#xff0c;編程技能不是第一重要的。學會如何做一個好的員工才是重要的&#xff0c;甚至是非常重要的。從最最基本的層面上講&#xff0c;每個員工都應該為最求兩種基本的…

nginx-exporter安裝使用

一、沒有vts的啟動方式 #nginx_exporter -telemetry.address:9113 -nginx.scrape_uri"http://127.0.0.1:10000/nginx_statusnginx_exporter -telemetry.address:9113 -nginx.scrape_uri"https://xx.xx.xx.xx:18443" -insecure #端口9113應該是nginx_exporter監…

spring data jpa 的 in 查詢 Specification 實現

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是一個簡單需求&#xff1a; 查詢所有部門id 屬于 idList 的數據 Page<WorkWeight> page workWeightRepository.findAll(new…

在移動互聯網上賺錢,行不行

移動互聯網已被證實是互聯網產業發展的大趨勢。不過&#xff0c;究竟如何賺錢&#xff0c;對海外企業與中國企業來說都是難題。本月初&#xff0c;幾位業界大佬與風投來了一番討論&#xff0c;議題還是一個“在移動互聯網上賺錢&#xff0c;行還是不行”。 百度試圖通過用戶習慣…

計算機網絡知識簡單介紹

一、網絡基礎 1.網絡指的是什么&#xff1f; 計算機與計算機之間通過物理鏈接介質&#xff08;網絡設備&#xff09;連接到一起。 計算機與計算機之間基于網絡協議通信&#xff08;網絡協議就相當于計算機界的英語&#xff09; 2.osi七層協議&#xff1a; 互聯網協議按照功能不…

Linux下安裝FFmpeg

FFmpeg官網&#xff1a;http://www.ffmpeg.org 官網介紹 FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure…

HTTP協議狀態碼詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 狀態碼含義100客戶端應當繼續發送請求。這個臨時響應是用來通知客戶端它的部分請求已經被服務器接收&#xff0c;且仍未被拒絕。客戶端應…

【Python web 開發】viewset 實現商品詳情頁的接口

我們如何來完成商品詳情頁的接口呢&#xff1f; 首先要配置一個商品詳情的url 按照我們正常的接口配法 &#xff0c;應該是后面要加一個id 的&#xff0c;為什么這里沒有加id 呢? ,應該是rooter register 的作用吧&#xff0c;等我在學習一遍基礎再來回答&#xff1f; 那么我…

Ignite中的機器學習介紹

為什么80%的碼農都做不了架構師&#xff1f;>>> 本系列共6篇文章&#xff0c;會通過一些代碼示例&#xff0c;講解如何在Ignite中使用機器學習庫&#xff0c;本文是本系列的第一篇。 從Ignite的2.4版本開始&#xff0c;機器學習就可以用于生產環境了。在這個版本中…

4G發牌或提早 電信聯通面臨艱難抉擇

曾幾何時遙不可及的4G&#xff0c;上馬的時間可能要比預期來的要早。今年3月&#xff0c;工信部部長苗圩表示&#xff0c;預計國內需要2-3年才會發放4G牌照。話音猶在耳&#xff0c;苗圩部長9月11日表示&#xff0c;“工信部已決定將于一年左右的時間發放TD-LTE牌照”。 工信部…

mysql 的 sql 執行計劃詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 引言&#xff1a; 實際項目開發中&#xff0c;由于我們不知道實際查詢的時候數據庫里發生了什么事情&#xff0c;數據庫軟件是怎樣掃描…

2018-10-28

我的博客即將入駐“云棲社區”&#xff0c;誠邀技術同仁一同入駐。

win10+vscode部署java開發環境

目錄 Java開發插件配置&#xff1a;調試&#xff1a;快捷鍵&#xff1a;啟動配置文件launch.json:啟動配置說明&#xff1a;Launch:Attach:User Setting:遇到的問題&#xff1a;參考&#xff1a;Java開發插件配置&#xff1a; Microsoft有個官方的插件Java Extension Pack&…

類的帶參方法有哪幾部分構成?

類的帶參方法有哪幾部分構成&#xff1f; 發布于2015-11-08 12:27 main函數可以不帶參數,也可以帶參數&#xff0c;這個參數可以認為是 main函數的形式參數。C語言規定main函數的參數只能有兩個&#xff0c;還規定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字…

新架構讓數據中心猶如PC

摘要&#xff1a;隨著VL2網絡拓撲結構帶來了對等帶寬&#xff0c;大量數據可以存放在遠方的數據中心&#xff0c;訪問起來卻猶如它們就在本地&#xff0c;這將對數據中心的架構產生重大影響。Todd Hoff參加了Hot Interconnects大會&#xff0c;對微軟VL2架構做了詳細解讀。CSDN…

mongodb分片概念和原理-實戰分片集群

一、分片分片是一種跨多臺機器分發數據的方法。MongoDB使用分片來支持具有非常大的數據集和高吞吐量操作的部署。問題&#xff1a;具有大型數據集或高吞吐量應用程序的數據庫系統可能會挑戰單個服務器的容量。例如&#xff0c;高查詢率會耗盡服務器的CPU容量。工作集大小大于系…

字符串的一些用法

一.Java字符串類基本概念在JAVA語言中&#xff0c;字符串數據實際上由String類所實現的。Java字符串類分為兩類&#xff1a;一類是在程序中不會被改變長度的不變字符串&#xff1b;二類是在程序中會被改變長度的可變字符串。Java環境為了存儲和維護這兩類字符串提供了 String和…

獲取BGR顏色的HSV值

import cv2import numpy as npgreen np.uint8([[[152, 245, 255]]]) # 輸入待轉換顏色的BGR值hsv_green cv2.cvtColor(green, cv2.COLOR_BGR2HSV)print(hsv_green)轉載于:https://www.cnblogs.com/LicwStack/p/10129505.html

HTTP 協議是無狀態協議,怎么理解

HTTP 是一個屬于應用層的面向對象的協議&#xff0c;HTTP 協議一共有五大特點&#xff1a;1、支持客戶/服務器模式&#xff1b;2、簡單快速&#xff1b;3、靈活&#xff1b;4、無連接&#xff1b;5、無狀態。 無連接 無連接的含義是限制每次連接只處理一個請求。服務器處理完客…

加入初創企業需要想清楚的幾個問題

摘要&#xff1a;加入一家初創企業是一段充滿冒險的旅程。沿途不會都是美景&#xff0c;更別忘了最初的夢想。 去初創公司面試&#xff0c;你一般會糾結于被問到什么問題。但更重要的是問自己&#xff1a;你下定決心在接下來的5年中“從頭再來”嗎&#xff1f;你能接受這份薪資…