劍指Offer刷題

刷一下算法題吧碟婆。

https://foreti.me/2017/09/08/jianzhi-offer/


替換空格

題目描述

請實(shí)現(xiàn)一個(gè)函數(shù)累奈,將一個(gè)字符串中的空格替換成“%20”。例如瞬捕,當(dāng)字符串為We Are Happy.則經(jīng)過替換之后的字符串為We%20Are%20Happy员咽。

思路

看到問題第一反應(yīng)是用replaceAll()方法惹骂,但這樣挺沒意思的。所以自己寫解決方法毛仪,這樣的話搁嗓,就有了兩種思路。

  1. 從前往后替換箱靴,當(dāng)遇到第一個(gè)空格時(shí)腺逛,要移動第一個(gè)空格后所有的字符一次;當(dāng)遇到第二個(gè)空格時(shí)衡怀,要移動第二個(gè)空格后所有的字符一次棍矛;以此類推。
  2. 從后往前狈癞,先計(jì)算需要多少空間茄靠,然后從后往前移動,則每個(gè)字符只為移動一次蝶桶,這樣效率更高一點(diǎn)慨绳。

這里提供第二種方法的代碼

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int spacenum = 0;//spacenum為計(jì)算空格數(shù)
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==' ')
                spacenum++;
        }
        int indexold = str.length()-1; //indexold為為替換前的str下標(biāo)
        int newlength = str.length() + spacenum*2;//計(jì)算空格轉(zhuǎn)換成%20之后的str長度
        int indexnew = newlength-1;//indexnew為把空格替換為%20后的str下標(biāo)
        str.setLength(newlength);//使str的長度擴(kuò)大到轉(zhuǎn)換成%20之后的長度,防止下標(biāo)越界
        for(;indexold>=0 && indexold<newlength;--indexold){ 
                if(str.charAt(indexold) == ' '){  //
                str.setCharAt(indexnew--, '0');
                str.setCharAt(indexnew--, '2');
                str.setCharAt(indexnew--, '%');
                }else{
                    str.setCharAt(indexnew--, str.charAt(indexold));
                }
        }
        return str.toString();
    }
}

從尾到頭打印鏈表

題目描述

輸入一個(gè)鏈表,從尾到頭打印鏈表每個(gè)節(jié)點(diǎn)的值。
思路2:
遞歸

import java.util.ArrayList;
public class Solution {
    ArrayList<Integer> arrayList = new ArrayList<Integer>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if(listNode != null){
            this.printListFromTailToHead(listNode.next);
            arrayList.add(listNode.val);
        }
        return arrayList;
    }
}

思路2:
利用棧

import java.util.Stack;
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        Stack<Integer> stack = new Stack<>();
        while (listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }
 
        ArrayList<Integer> list = new ArrayList<>();
        while (!stack.isEmpty()) {
            list.add(stack.pop());
        }
        return list;       
    }
}

二維數(shù)組中的查找

題目描述

在一個(gè)二維數(shù)組中脐雪,每一行都按照從左到右遞增的順序排序厌小,每一列都按照從上到下遞增的順序排序。請完成一個(gè)函數(shù)战秋,輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù)璧亚,判斷數(shù)組中是否含有該整數(shù)。

解題思路

利用二維數(shù)組由上到下脂信,由左到右遞增的規(guī)律癣蟋,
那么選取右上角或者左下角的元素a[row][col]與target進(jìn)行比較,
當(dāng)target小于元素a[row][col]時(shí)狰闪,那么target必定在元素a所在行的左邊,
即col--疯搅;
當(dāng)target大于元素a[row][col]時(shí),那么target必定在元素a所在列的下邊,
即row++埋泵;
時(shí)間復(fù)雜度是O(2n)

public class Solution {
    public boolean Find(int target, int [][] array) {
        int row=0;
        int col=array[0].length-1;
        while(row<=array.length-1&&col>=0){
            if(target==array[row][col])
                return true;
            else if(target>array[row][col])
                row++;
            else
                col--;
        }
        return false;
    }
}

另一種思路是
把每一行看成有序遞增的數(shù)組幔欧,
利用二分查找,
通過遍歷每一行得到答案丽声,
時(shí)間復(fù)雜度是O(nlogn)

public class Solution {
    public boolean Find(int [][] array,int target) {
         
        for(int i=0;i<array.length;i++){
            int low=0;
            int high=array[i].length-1;
            while(low<=high){
                int mid=(low+high)/2;
                if(target>array[i][mid])
                    low=mid+1;
                else if(target<array[i][mid])
                    high=mid-1;
                else
                    return true;
            }
        }
        return false;
 
    }
}



<p id="div-border-left-red"><i>DigitalOcean 優(yōu)惠碼礁蔗,注冊充值 5 送100,鏈接一 鏈接二</i></p>
<p id="div-border-left-red"><i>Lastly, welcome to follow me on github</i></p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雁社,一起剝皮案震驚了整個(gè)濱河市浴井,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霉撵,老刑警劉巖滋饲,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喊巍,居然都是意外死亡屠缭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門崭参,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呵曹,“玉大人,你說我怎么就攤上這事何暮⊙傥梗” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵海洼,是天一觀的道長跨新。 經(jīng)常有香客問我,道長坏逢,這世上最難降的妖魔是什么域帐? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任赘被,我火速辦了婚禮,結(jié)果婚禮上肖揣,老公的妹妹穿的比我還像新娘民假。我一直安慰自己,他們只是感情好龙优,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布羊异。 她就那樣靜靜地躺著,像睡著了一般彤断。 火紅的嫁衣襯著肌膚如雪野舶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天宰衙,我揣著相機(jī)與錄音筒愚,去河邊找鬼。 笑死菩浙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的句伶。 我是一名探鬼主播劲蜻,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼考余!你這毒婦竟也來了先嬉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤楚堤,失蹤者是張志新(化名)和其女友劉穎疫蔓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體身冬,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衅胀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酥筝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滚躯。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嘿歌,靈堂內(nèi)的尸體忽然破棺而出掸掏,到底是詐尸還是另有隱情,我是刑警寧澤宙帝,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布丧凤,位于F島的核電站,受9級特大地震影響步脓,放射性物質(zhì)發(fā)生泄漏愿待。R本人自食惡果不足惜浩螺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呼盆。 院中可真熱鬧年扩,春花似錦、人聲如沸访圃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腿时。三九已至况脆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間批糟,已是汗流浹背格了。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徽鼎,地道東北人盛末。 一個(gè)月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像否淤,于是被迫代替她去往敵國和親悄但。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

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

  • 1.二維數(shù)組中的查找 題目描述在一個(gè)二維數(shù)組中(每個(gè)一維數(shù)組的長度相同)石抡,每一行都按照從左到右遞增的順序排序檐嚣,每一...
    念人遠(yuǎn)鄉(xiāng)閱讀 512評論 0 5
  • 學(xué)習(xí) 1.二維數(shù)組中的查找 在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序啰扛,每一列都按照從上到下遞增的順序排...
    進(jìn)擊的STE閱讀 451評論 0 1
  • 1. 二維數(shù)組中的查找 在一個(gè)二維數(shù)組中(每個(gè)一維數(shù)組的長度相同)嚎京,每一行都按照從左到右遞增的順序排序,每一列都按...
    林孖琸閱讀 272評論 0 0
  • 要求:不僅僅能實(shí)現(xiàn)相應(yīng)的功能隐解,還需要保證代碼的魯棒性鞍帝,并且能夠分析代碼的空間復(fù)雜度和時(shí)間復(fù)雜度。 二維數(shù)組中的查找...
    二十四橋客_閱讀 975評論 0 1
  • 因?yàn)閯χ竜ffer的題目比較簡單煞茫,所以就做成合集了膜眠,刷一題更新一題。 1 二位數(shù)組中的查找 在一個(gè)二維數(shù)組中(每個(gè)...
    過年啦閱讀 605評論 0 0