原创 iOS-常駐線程實現以及優雅退出方式

RunLoop的開啓方式: - (void)run; //使線程進入死循環,不利於控制線程退出,不推薦 - (void)runUntilDate:(NSDate *)limitDate; //可以設置超時

原创 iOS-Runtime基礎結構

iOSRuntime Runtime概念: OC是基於C的,區別於C的一點就是OC屬於動態語言,並且有面向對象的特性。相比於C,函數的調用在編譯的時候會決定調用哪個函數。OC會在編譯和鏈接時做的事情放到了運行時(Runtime)來

原创 iOS-RunLoop

RunLoop概念:         運行循環。實際上是一個對象,這個對象在循環中用來處理程序運行過程中出現的各種事件(比如說觸摸事件、UI刷新事件、定時器事件、Selector事件),從而保持程序的持續運行。         在沒有事件

原创 iOS-Runtime消息機制

Runtime消息機制:        本質上講,OC的每一次方法調度都是一次消息的發送。其中方法調度的原理如下: /***********************************************************

原创 iOS-View Layout相關方法

相關方法 - (CGSize)sizeThatFits:(CGSize)size - (void)sizeToFit ——————- - (void)layoutSubviews - (void)layoutIfNeeded - (voi

原创 查找一個字符串中第一個只出現兩次的字符。

題目: 查找一個字符串中第一個只出現兩次的字符。比如:“abcdefabcdefabc”中第一個只出現兩次爲‘d’,要求時間複雜度爲O(N),空間複雜度爲O(1)。 由於本體的特殊性,我們可以定義一個非常簡單的哈希表。。字符(char)是

原创 實現1+2+3...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)

通常求1+2+…+n除了用公式n(n+1)/2之外,無外乎循環和遞歸兩種思路。由於已經明確限制for和while的使用,循環已經不能再用了。同樣,遞歸函數也需要用if語句或者條件判斷語句來判斷是繼續遞歸下去還是終止遞歸,但現在題目

原创 元素出棧、入棧順序的合法性。

題目: 判斷元素出棧、入棧順序的合法性。如:入棧的序列(1,2,3,4,5),出棧序列爲(4,5,3,2,1),則合法。入棧的序列(1,2,3,4,5),出棧序列爲(4,5,2,3,1),則不合法。 我們可以

原创 一個數組中有一個數字的次數超過了數組的一半,求出這個字符

題目: 一個數組中有一個數字的次數超過了數組的一半,求出這個字符。 如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超過一半的數字是2。 解法一: 可以借用排序的思想,因爲其中的一個數字超過了數組

原创 實現一個Add函數,讓兩個數相加,但是不能使用+、-、*、/等四則運算符。ps:也不能用++、--等等

分析:這又是一道考察發散思維的很有意思的題目。當我們習以爲常的東西被限制使用的時候,如何突破常規去思考,就是解決這個問題的關鍵所在。 看到的這個題目,首先我們可以分析人們是如何做十進制的加法的,比如是如何得出5+17=22這個結果的。

原创 判斷兩個鏈表是否相交,若相交,求交點。(假設鏈表帶環、不帶環)

問題1: 給出兩個鏈表的頭指針,判斷這兩個鏈表是否相交。假設兩個鏈表均不帶環。 解法一: 如果兩個鏈表都無環,則可以把第二個鏈表接在第一個鏈表後面,如果得到的鏈表有環,則說明這兩個鏈表相交。這裏如果有環,則第二個鏈表的表

原创 -設計一個類不能被繼承 2.設計一個類只能在堆上創建對象。 3.設計一個類只能在棧上創建對象。

設計一個類不能被繼承 常規解法:將構造函數設爲私有函數 在C++中,子類的構造函數會自動調用父類的構造函數,子類的析構函數也會調用父類的析構函數。要想一個類不能被繼承,只要把它的構造函數和析構函數都設置爲私有函數。那麼當一個類試圖從那裏繼

原创 合併兩個有序鏈表,合併以後的鏈表依舊有序。

解法一: Node *ListMerge1(Node *head1,Node *head2)//採用遞歸的方法實現 { if(head1==NULL) return head2; i

原创 逆置/反轉單鏈表+查找單鏈表的倒數第k個節點,要求只能遍歷一次鏈表

鏈表中的一個很常見的操作是:鏈表的逆置,也叫鏈表的反轉。 如:1->3->5->7->9 反轉後是 9->7->5->3->1 紅色的箭頭是新的變換,明白了操作原理就很好寫代碼了。 使用了三個指針:pre(前驅) cur

原创 給定一個整數N,那麼N的階乘N!末尾有多少個0呢?求N!的二進制表示中最低位1的位置。

題目1:給定一個整數N,那麼N的階乘N!末尾有多少個0呢?例如:N=10,N!=3 628 800,N!的末尾有兩個0。 初看這樣的題目可能會想到直接求出N!的階乘,然後再計算出0的個數。 顯然用這種方法如果N很大的情況下,非常容易溢出