劍指offer(11-15)

JZ11

問題描述:

輸入一個整數(shù),輸出該數(shù)32位二進(jìn)制表示中1的個數(shù)音榜。其中負(fù)數(shù)用補(bǔ)碼表示庞瘸。

思路:

  • 使用一個計數(shù)器32,遍歷每個位置的元素
  • 將當(dāng)前數(shù)和1相與赠叼,如果當(dāng)前的低位是1擦囊,那么相與的結(jié)果為1违霞,如果當(dāng)前低位是0,那么相與的結(jié)果為0瞬场;
  • 然后使用一個res變量記錄當(dāng)前位置為1的個數(shù)

代碼:

public class Solution {
    public int NumberOf1(int n) {
        int res = 0;
        for(int i = 0; i < 32; i++) {
            if((n & 1) == 1) {
                res++;
            }
            n = n >> 1;
        }
        return res;
    }
}

JZ12

問題描述:

給定一個double類型的浮點(diǎn)數(shù)base和int類型的整數(shù)exponent买鸽。求base的exponent次方。

保證base和exponent不同時為0

思路:

  • 考慮正負(fù)號
  • 當(dāng)exponent為正數(shù)的時候泌类,直接while循環(huán)相乘即可
  • 當(dāng)exponent為負(fù)數(shù)的時候癞谒,首先必須將exponent取正,然乎while求出累計和之后刃榨,求倒數(shù)即可

代碼:

public class Solution {
    public double Power(double base, int exponent) {
        if(base == 0) return 0;
        if(exponent == 0) return 1;
        boolean f = exponent > 0 ? true : false;
        exponent = Math.abs(exponent);
        double res = 1;
        while(exponent-- > 0) {
            res *= base;
        }
        return f ? res : 1 / res;
    }
}

JZ13

問題描述:

輸入一個整數(shù)數(shù)組弹砚,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分枢希,所有的偶數(shù)位于數(shù)組的后半部分桌吃,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對位置不變苞轿。

思路一:

  • 創(chuàng)建一個輔助數(shù)組
  • 第一次遍歷原始數(shù)組的時候茅诱,將所有的奇數(shù)值加入數(shù)組
  • 第二次遍歷數(shù)組的時候,將所有的偶數(shù)值加入數(shù)組
  • 第三次遍歷將輔助數(shù)組中的所有元素全部放入原始數(shù)組中

思路二:

  • 使用冒泡排序的思想(每次都是把最后面的偶數(shù)沉到數(shù)組底部)
  • 每次遍歷到奇數(shù)的時候跳過
  • 當(dāng)前位置是偶數(shù)且他下一個數(shù)也是偶數(shù)搬卒,跳過
  • 當(dāng)前位置是偶數(shù)且他下一個數(shù)是奇數(shù)瑟俭,則交換當(dāng)前的數(shù)和他下一個數(shù)

代碼:

// 思路一:
public class Solution {
    public void reOrderArray(int [] array) {
        int n = array.length;
        int[] t = new int[n];
        int index = 0;
        for(int i = 0; i < n; i++) {
            if((array[i] & 1) == 1) {
                t[index++] = array[i];
            }
        }
        for(int i = 0; i < n; i++) {
            if((array[i] & 1) == 0) {
                t[index++] = array[i];
            }
        }
        for(int i = 0; i < n; i++) {
            array[i] = t[i];
        }
    }
}

// 思路二:
public class Solution {
    public void reOrderArray(int [] array) {
        int n = array.length;
        for(int i = n - 1; i > 0; i--) {
            for(int j = 0; j < i; j++) {
                if((array[j] & 1) == 0 && ((array[j + 1] & 1) == 1)) {
                    swap(array, j, j + 1);
                }
            }
        }
    }
    
    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

JZ14

問題描述:

輸入一個鏈表,輸出該鏈表中倒數(shù)第k個結(jié)點(diǎn)契邀。

思路一:

  • 首先讓一個指針t先走k步
  • 然后讓r從head開始摆寄,和t指針同時向后走憔儿,如果t指針到null的時候剃袍,然后r指針即可

代碼:

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        ListNode t = head;
        while(k-- > 0) {
            if(t == null) return null;
            t = t.next;
        }
        ListNode r = head;
        while(t != null) {
            r = r.next;
            t = t.next;
        }
        return r;
    }
}

JZ15

問題描述:

輸入一個鏈表缀棍,反轉(zhuǎn)鏈表后茎匠,輸出新鏈表的表頭咙鞍。

思路一:

  • 遍歷的方式實現(xiàn)

代碼:

public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode pre = null, next = null;
        while(head != null) {
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末田弥,一起剝皮案震驚了整個濱河市涛目,隨后出現(xiàn)的幾起案子赞季,更是在濱河造成了極大的恐慌现恼,老刑警劉巖肃续,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異述暂,居然都是意外死亡痹升,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門畦韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疼蛾,“玉大人,你說我怎么就攤上這事艺配〔煊簦” “怎么了衍慎?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長皮钠。 經(jīng)常有香客問我稳捆,道長,這世上最難降的妖魔是什么麦轰? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任乔夯,我火速辦了婚禮,結(jié)果婚禮上款侵,老公的妹妹穿的比我還像新娘末荐。我一直安慰自己,他們只是感情好新锈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布甲脏。 她就那樣靜靜地躺著,像睡著了一般妹笆。 火紅的嫁衣襯著肌膚如雪块请。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天拳缠,我揣著相機(jī)與錄音墩新,去河邊找鬼。 笑死窟坐,一個胖子當(dāng)著我的面吹牛抖棘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狸涌,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼最岗!你這毒婦竟也來了帕胆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤般渡,失蹤者是張志新(化名)和其女友劉穎懒豹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驯用,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脸秽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝴乔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片记餐。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖薇正,靈堂內(nèi)的尸體忽然破棺而出片酝,到底是詐尸還是另有隱情囚衔,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布雕沿,位于F島的核電站练湿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏审轮。R本人自食惡果不足惜肥哎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疾渣。 院中可真熱鬧篡诽,春花似錦、人聲如沸稳衬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薄疚。三九已至碧信,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間街夭,已是汗流浹背砰碴。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留板丽,地道東北人呈枉。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像埃碱,于是被迫代替她去往敵國和親猖辫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350