×2019-12-18 找到 K 個(gè)最接近的元素

給定一個(gè)排序好的數(shù)組碟绑,兩個(gè)整數(shù) k 和 x剖膳,從數(shù)組中找到最靠近 x(兩數(shù)之差最信撞)的 k 個(gè)數(shù)格侯。返回的結(jié)果必須要是按升序排好的。如果有兩個(gè)數(shù)與 x 的差值一樣财著,優(yōu)先選擇數(shù)值較小的那個(gè)數(shù)联四。

示例 1:

輸入: [1,2,3,4,5], k=4, x=3
輸出: [1,2,3,4]

示例 2:

輸入: [1,2,3,4,5], k=4, x=-1
輸出: [1,2,3,4]

說明:

k 的值為正數(shù),且總是小于給定排序數(shù)組的長度撑教。
數(shù)組不為空朝墩,且長度不超過 104
數(shù)組里的每個(gè)元素與 x 的絕對值不超過 104

更新(2017/9/19):
這個(gè)參數(shù) arr 已經(jīng)被改變?yōu)橐粋€(gè)整數(shù)數(shù)組(而不是整數(shù)列表)。 請重新加載代碼定義以獲取最新更改伟姐。

C++1

解題思路:
使用二分法收苏,使得兩邊都逐漸接近x,但是每次下標(biāo)只會從start增大愤兵,保證如果有兩個(gè)數(shù)與 x 的差值一樣鹿霸,優(yōu)先選擇數(shù)值較小的那個(gè),也就是左邊的數(shù)秆乳。

class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        int size = arr.size(); 
// 這個(gè)點(diǎn)要選在倒數(shù)第k個(gè)懦鼠,因?yàn)槠鹗键c(diǎn)不可能在這個(gè)或者以后,否則end-begin<k找不到k個(gè)數(shù)了,還有一方面是因?yàn)橄旅嬉胢id+k判斷葛闷,否則程序溢出
        int begin = 0, end = size-k, mid=0;
        while(begin<end){
            mid = begin+(end-begin)/2;
            if(abs(arr[mid]-x)>abs(arr[mid+k]-x)){
                begin = mid+1;
            }else{
                end = mid;
            }
        }
        vector<int> res;
        for(int i=begin;i<begin+k;i++){
            res.push_back(arr[i]);
        }
        return res;
    }
};
C++2

解題思路:
從兩邊向中間縮小范圍憋槐,直到還剩下k個(gè)數(shù)為止。

class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        int size = arr.size();
        int begin = 0, end = size-1;
        while(size>k){
            // 這個(gè)等于號不要忘了淑趾,當(dāng)?shù)扔诘臅r(shí)候要選擇保留左邊的數(shù)
            if(abs(arr[end]-x)>=abs(arr[begin]-x)){
                end--;
            }else{
                begin++;
            }
            size--;
        }
        vector<int>res;
        for (int index = begin; index <=end; index++)
            res.push_back(arr[index]);       

        return res;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阳仔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扣泊,更是在濱河造成了極大的恐慌近范,老刑警劉巖骡送,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稚铣,死亡現(xiàn)場離奇詭異滔蝉,居然都是意外死亡拼岳,警方通過查閱死者的電腦和手機(jī)朵锣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門驹吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涕俗,“玉大人高蜂,你說我怎么就攤上這事沥匈≌嵛梗” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵高帖,是天一觀的道長缰儿。 經(jīng)常有香客問我,道長散址,這世上最難降的妖魔是什么乖阵? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮预麸,結(jié)果婚禮上瞪浸,老公的妹妹穿的比我還像新娘。我一直安慰自己吏祸,他們只是感情好默终,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犁罩,像睡著了一般齐蔽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上床估,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天含滴,我揣著相機(jī)與錄音,去河邊找鬼丐巫。 笑死谈况,一個(gè)胖子當(dāng)著我的面吹牛勺美,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碑韵,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赡茸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了祝闻?” 一聲冷哼從身側(cè)響起占卧,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎联喘,沒想到半個(gè)月后华蜒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豁遭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年叭喜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖谢。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捂蕴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闪幽,到底是詐尸還是另有隱情啥辨,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布沟使,位于F島的核電站委可,受9級特大地震影響渊跋,放射性物質(zhì)發(fā)生泄漏腊嗡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一拾酝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒿囤,春花似錦客们、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脸侥,卻和暖如春建邓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睁枕。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工官边, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沸手,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓注簿,卻偏偏與公主長得像契吉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子诡渴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 題目鏈接難度:中等 類型: 數(shù)組捐晶、二分查找 給定一個(gè)排序好的數(shù)組,兩個(gè)整數(shù) k 和 x玩徊,從數(shù)組...
    wzNote閱讀 856評論 0 1
  • 給定一個(gè)排序好的數(shù)組恩袱,兩個(gè)整數(shù) k 和 x泣棋,從數(shù)組中找到最靠近 x(兩數(shù)之差最小)的 k 個(gè)數(shù)畔塔。返回的結(jié)果必須要是...
    上行彩虹人閱讀 179評論 0 0
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,342評論 0 2
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評論 0 4
  • 1. 找出數(shù)組中重復(fù)的數(shù)字 題目:在一個(gè)長度為n的數(shù)組里的所有數(shù)字都在0到n-1的范圍內(nèi)潭辈。數(shù)組中某些數(shù)字是重復(fù)的,...
    BookThief閱讀 1,763評論 0 2