【D37】K 個(gè)一組翻轉(zhuǎn)鏈表&數(shù)據(jù)流的中位數(shù) (LC 25&295)

25. K 個(gè)一組翻轉(zhuǎn)鏈表

給你一個(gè)鏈表,每 k 個(gè)節(jié)點(diǎn)一組進(jìn)行翻轉(zhuǎn)狈蚤,請(qǐng)你返回翻轉(zhuǎn)后的鏈表孝赫。
k 是一個(gè)正整數(shù)互艾,它的值小于或等于鏈表的長度社露。
如果節(jié)點(diǎn)總數(shù)不是 k 的整數(shù)倍,那么請(qǐng)將最后剩余的節(jié)點(diǎn)保持原有順序店读。

  • 用棧來存儲(chǔ)需要反轉(zhuǎn)的鏈表
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    Deque<ListNode> stack = new LinkedList<>();

    public ListNode reverseKGroup(ListNode head, int k) {
        //添加虛擬頭節(jié)點(diǎn)
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;

        //反轉(zhuǎn)鏈表的前驅(qū)結(jié)點(diǎn)pre
        ListNode pre = dummyHead, cur = head;

        while(cur != null){
            //1.將需要反轉(zhuǎn)的一組結(jié)點(diǎn)入棧
            for(int i = 0 ; i < k && cur != null; i++){
                stack.push(cur);
                cur = cur.next;
            }

            //剩余結(jié)點(diǎn)不足k個(gè)嗦枢,則直接結(jié)束循環(huán)
            if(stack.size() < k){
                break;
            }

            //反轉(zhuǎn)鏈表的后繼結(jié)點(diǎn)tail
            ListNode tail = cur,temp = pre;
            while(!stack.isEmpty()){
                temp.next = stack.pop();
                temp = temp.next;
            }
            //該組最后一個(gè)結(jié)點(diǎn)成為下一組結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)
            pre = temp;
            //最后一個(gè)結(jié)點(diǎn)指向后繼結(jié)點(diǎn)
            temp.next = tail;  
        }
        return dummyHead.next;
    }
}

295. 數(shù)據(jù)流的中位數(shù)

中位數(shù)是有序列表中間的數(shù)。如果列表長度是偶數(shù)屯断,中位數(shù)則是中間兩個(gè)數(shù)的平均值文虏。
例如,[2,3,4] 的中位數(shù)是 3; [2,3] 的中位數(shù)是 (2 + 3) / 2 = 2.5
設(shè)計(jì)一個(gè)支持以下兩種操作的數(shù)據(jù)結(jié)構(gòu):
void addNum(int num) - 從數(shù)據(jù)流中添加一個(gè)整數(shù)到數(shù)據(jù)結(jié)構(gòu)中殖演。
double findMedian() - 返回目前所有元素的中位數(shù)氧秘。

  • 維護(hù)一個(gè)升序的列表,每次插入時(shí)使用二分查找的方法尋找插入位置
class MedianFinder {

    ArrayList<Integer> list;
    /** initialize your data structure here. */
    public MedianFinder() {
        list = new ArrayList<>();
    }
    
    public void addNum(int num) {
        //二分查找插入位置   
        list.add(insertIndex(num), num);
    }

    private int insertIndex(int num){
        int left = 0, right = list.size() - 1;
        while(left <= right){
            int mid = (left + right) / 2;
            if(list.get(mid) == num){
                return mid;
            }else if(list.get(mid) < num){
                left = mid + 1;
            }else{
                right = mid - 1;
            }
        }
        return left;
    }
    
    public double findMedian() {
        int len = list.size();
        double temp = (double)  list.get(len/2);
        if(list.size() % 2 == 0){
            temp = (temp + list.get(len/2 - 1)) / 2;
        }
        return temp;
    }
}

/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder obj = new MedianFinder();
 * obj.addNum(num);
 * double param_2 = obj.findMedian();
 */
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趴久,一起剝皮案震驚了整個(gè)濱河市丸相,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彼棍,老刑警劉巖灭忠,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異座硕,居然都是意外死亡弛作,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門坎吻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缆蝉,“玉大人,你說我怎么就攤上這事瘦真】罚” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵诸尽,是天一觀的道長原杂。 經(jīng)常有香客問我,道長您机,這世上最難降的妖魔是什么穿肄? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任年局,我火速辦了婚禮,結(jié)果婚禮上咸产,老公的妹妹穿的比我還像新娘矢否。我一直安慰自己,他們只是感情好脑溢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布僵朗。 她就那樣靜靜地躺著,像睡著了一般屑彻。 火紅的嫁衣襯著肌膚如雪验庙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天社牲,我揣著相機(jī)與錄音粪薛,去河邊找鬼。 笑死搏恤,一個(gè)胖子當(dāng)著我的面吹牛违寿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挑社,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陨界,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了痛阻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤腮敌,失蹤者是張志新(化名)和其女友劉穎阱当,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糜工,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弊添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捌木。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油坝。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刨裆,靈堂內(nèi)的尸體忽然破棺而出澈圈,到底是詐尸還是另有隱情,我是刑警寧澤帆啃,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布瞬女,位于F島的核電站,受9級(jí)特大地震影響努潘,放射性物質(zhì)發(fā)生泄漏诽偷。R本人自食惡果不足惜坤学,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望报慕。 院中可真熱鬧深浮,春花似錦、人聲如沸眠冈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洋闽。三九已至玄柠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咧擂。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工祟滴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人这弧。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像虚汛,于是被迫代替她去往敵國和親匾浪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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