iOS 每日算法(Swift)

“不積跬步审磁,無以至千里谈飒;不積小流,無以成江毫ν迹”

算法的重要性我就不說了,不論是平時(shí)的項(xiàng)目中還是找工作的面試過程中掺逼,算法都是必不可少的吃媒,同時(shí)算法可以鍛煉我們的思維邏輯能力以及解決問題的能力。
今天開始我就會(huì)從各類書籍以及博客等挑選出優(yōu)質(zhì)的算法題與大家分享,從簡到難赘那,在練習(xí)算法的同時(shí)刑桑,我也會(huì)對算法中運(yùn)用的知識點(diǎn)進(jìn)行整理,與大家共同學(xué)習(xí)成長募舟,只要我們每天抽出半個(gè)小時(shí)到一個(gè)小時(shí)的時(shí)間去學(xué)習(xí)祠斧、整理、以及反思拱礁,我相信一段時(shí)間過后你會(huì)成長很多琢锋。

目錄

1. 給出一個(gè)整形數(shù)組和一個(gè)目標(biāo)值,判斷數(shù)組中是否有兩個(gè)數(shù)之和等于目標(biāo)值呢灶。
2. 利用遞歸算法求1到n的和
3. 不借用第三個(gè)變量吴超,如何交換兩個(gè)變量的值?(變量a鸯乃,b)

1. 給出一個(gè)整形數(shù)組和一個(gè)目標(biāo)值鲸阻,判斷數(shù)組中是否有兩個(gè)數(shù)之和等于目標(biāo)值。

法一:很多人可能搭眼一看就能想到每次選中一個(gè)數(shù)缨睡,然后遍歷整個(gè)數(shù)組判斷有沒有一個(gè)數(shù)相加之和等于目標(biāo)值鸟悴。但是這種方法的時(shí)間復(fù)雜度為O(n2),太復(fù)雜奖年,所以我們需要找到更好的方法優(yōu)化時(shí)間復(fù)雜度细诸。

法二:我們可以利用集合處理這次問題,在遍歷數(shù)組的過程中拾并,我們利用字典保存當(dāng)前值揍堰,假如字典中存在一個(gè)數(shù)等于目標(biāo)值減去當(dāng)前值,那么可以證明整個(gè)遍歷中一定有兩個(gè)數(shù)之和等于目標(biāo)值嗅义。你可以這種方法的時(shí)間復(fù)雜度為O(n)屏歹。

代碼:

    func judgeTwoNums(numsArr: [Int], targetValue: Int) -> Bool {
        var set = Set<Int>()
        for num in numsArr {
            if set.contains(targetValue - num) {
               return true
            }
            set.insert(num)
            print("有兩個(gè)數(shù)之和等于目標(biāo)值")
        }
        return false
    }

拓展:

給定一個(gè)整形數(shù)組中有且僅有兩個(gè)數(shù)之和等于目標(biāo)值,求這兩個(gè)數(shù)在數(shù)組中的序號之碗。

此題的思路跟上面題的思路基本相似蝙眶,不同之處是此題需要得到兩個(gè)數(shù)在數(shù)組中的序號,所以不能使用集合(排列無序)來解決這個(gè)問題褪那,為了方便得到序列號幽纷,我們使用字典來解決這個(gè)問題。時(shí)間的復(fù)雜度為O(n)博敬。

    func judgeTwoNum(numsArr: [Int], targetValue: Int) -> [Int] {
        var dict = [Int: Int]()
        for (i, num) in numsArr.enumerated() {
            if let index = dict[targetValue - num] {
                return [index, i]
            } else {
                dict[num] = i
            }
        }
        return []
    }

知識點(diǎn):

集合(set):用來存儲(chǔ)沒有固定順序友浸、類型相同且不重復(fù)的值。

2. 利用遞歸算法求1到n的和

所謂遞歸偏窝,簡單點(diǎn)來說收恢,就是一個(gè)函數(shù)直接或間接調(diào)用自身的一種方法武学,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解。

    //    MARK: 遞歸算法
    func sum(n: Int) -> Int {
        var result: Int
        if n == 0 {
            return 0
        } else if n == 1 {
            return 1
        } else {
            result = sum(n: (n - 1)) + n
            return result
        }
    }

3. 不借用第三個(gè)變量伦意,如何交換兩個(gè)變量的值火窒?(變量a,b)

法一:

a = a + b
b = a- b --> b = (a + b) - b --> b = a
a= a- b --> a = (a + b) - b(此時(shí)b=a) --> a = b
a = a - b
b = a + b --> (a - b) + b --> b = a
a = a + b --> (a - b) + b(此時(shí)b=a) --> a= b

法二(按位異或):
參加運(yùn)算的兩個(gè)數(shù)驮肉,換算為二進(jìn)制(0熏矿、1)后,進(jìn)行異或運(yùn)算离钝。只有當(dāng)相應(yīng)位上的數(shù)字不相同時(shí)票编,該為才取1,若相同奈辰,即為0栏妖。任何數(shù)與0異或,結(jié)果都是其本身奖恰。

a = a ^ b
b = b ^ a 
a = a ^ b
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吊趾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瑟啃,更是在濱河造成了極大的恐慌论泛,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛹屿,死亡現(xiàn)場離奇詭異屁奏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)错负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門坟瓢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犹撒,你說我怎么就攤上這事折联。” “怎么了识颊?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵诚镰,是天一觀的道長。 經(jīng)常有香客問我祥款,道長清笨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任刃跛,我火速辦了婚禮抠艾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桨昙。我一直安慰自己检号,他們只是感情好首懈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谨敛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滤否。 梳的紋絲不亂的頭發(fā)上脸狸,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音藐俺,去河邊找鬼炊甲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛欲芹,可吹牛的內(nèi)容都是我干的卿啡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼菱父,長吁一口氣:“原來是場噩夢啊……” “哼颈娜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浙宜,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤官辽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后粟瞬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體同仆,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年裙品,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俗批。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡市怎,死狀恐怖岁忘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焰轻,我是刑警寧澤臭觉,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站辱志,受9級特大地震影響蝠筑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揩懒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一什乙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧已球,春花似錦臣镣、人聲如沸辅愿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽点待。三九已至,卻和暖如春弃舒,著一層夾襖步出監(jiān)牢的瞬間癞埠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工聋呢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苗踪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓削锰,卻偏偏與公主長得像通铲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子器贩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348