數(shù)據(jù)結(jié)構(gòu)算法相關(guān)題(LeetCode相關(guān)問(wèn)題)

1. 斐波那契數(shù)列求和

斐波那契數(shù)列(0掌桩,1边锁,1,2波岛,3茅坛,5 . . .)求和
- (NSInteger )fb:(NSInteger)n{
    if (n <= 1) {
        return n;
    }
    NSInteger first = 0;
    NSInteger second = 1;
    NSInteger sum = 0;
    for (NSInteger i = 0; i < n-1; i++) {
        sum = first + second;
        first = second;
        second = sum;
    }
    return second;
}
  1. 反轉(zhuǎn)鏈表(反轉(zhuǎn)鏈表)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
  public ListNode reverseList(ListNode head) {
        
        ListNode preNode = null;
        ListNode curNode = head;
        
        while ( curNode != null ){
            
            ListNode nextNode = curNode.next;
            
            curNode.next = preNode;
            preNode = curNode;
            curNode = nextNode;
        }
        
        return preNode;
    }
  1. 合并鏈表( 合并兩個(gè)有序鏈表)

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

public:
   ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        
        if (l1 == NULL){
            
            return l2;
            
        }else if(l2 == NULL){
            
            return l1;
            
        }
        
        ListNode *mergedNode = NULL;
        
        if(l1->val < l2->val){
            
            mergedNode = l1;
            mergedNode->next = mergeTwoLists(mergedNode->next,l2);
            
        }else{
            
            mergedNode = l2;
            mergedNode->next = mergeTwoLists(l1, mergedNode->next);
        }
        
        return mergedNode;
    }

4.查找鏈表倒數(shù)第k個(gè)元素( 面試題 02.02. 返回倒數(shù)第 k 個(gè)節(jié)點(diǎn))

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    int kthToLast(ListNode* head, int k) {
    if(head == NULL )
        return -1;
    
    ListNode *pAhead = head;
    ListNode *pBehind = head;
    for(int i = 0;i < k - 1;i++)
    {
        if(pAhead->next != NULL)
            pAhead = pAhead->next;
        else
        {
            return -1;
        }
    }

    while(pAhead->next != NULL)
    {
        pAhead = pAhead->next;
        pBehind = pBehind->next;
    }

    return pBehind->val;
    }
};

5.倒序打印鏈表的值

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};


void PrintListReversingly(ListNode* pHead)
{
    if(pHead != NULL)
    {
        if (pHead->next != NULL)
        {
            PrintListReversingly(pHead->next);
        }
        
        printf("%d\t", pHead->val);
    }
}

6.刪除某個(gè)節(jié)點(diǎn)( 刪除鏈表中的節(jié)點(diǎn))

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void deleteNode(struct ListNode* node) {
    if(node == NULL || node->next == NULL){
        return;
    }
    node->val = node->next->val;
    node->next = node->next->next;
}
  1. 刪除值為val的節(jié)點(diǎn)
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode *head, int val){

        ListNode *dummyHead = new ListNode(-1);
        dummyHead->next = head;

        ListNode *cur = dummyHead;
        
        while (cur->next != NULL){
            
            if (cur->next->val == val){
                
                ListNode *delNode = cur->next;
                cur->next = delNode->next;
                delete delNode;
                
            } else{
                
                cur = cur->next;
                
            }
        }

        ListNode *returnNode = dummyHead->next;
        delete dummyHead;

        return returnNode;
    }
};
  1. 二叉樹(shù)轉(zhuǎn)鏈表( 114. 二叉樹(shù)展開(kāi)為鏈表)
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

class Solution {
    TreeNode prev ;
    public void flatten(TreeNode root) {
        if (root == null)
        return;
       
        flatten(root.right);
        flatten(root.left);
        if (prev != null){
            root.right = prev;
            root.left = null;
        }
        prev = root;
    }
}

64. 最小路徑和

 int minPathSum(vector<vector<int>>& grid) {
        int n = grid.size();
        assert(n > 0);
        int m = grid[0].size();
        assert(m > 0);
        vector<vector<int>> res = grid;
        for (int i = 1;i < n;i++){          
            res[i][0] = grid[i][0] + res[i-1][0];
        }
        for (int i = 1;i < m;i++){
            res[0][i] = grid[0][i] + res[0][i-1];
        }
        for (int i = 1;i<n;i++){
            for (int j = 1;j<m;j++){
                res[i][j] = min(res[i-1][j],res[i][j-1])+grid[i][j];
            }
        }
        return res[n-1][m-1];
    }

5. 最長(zhǎng)回文子串

   string longestPalindrome(string s) {
        if(s.size() <= 1) return s;
        int maxLen = 1;
        int begin = 0;
        int i = 0;
        while(i<s.size()){
            int l = i-1;
            int r = i;
            while(++r < s.size() && s[r] == s[i]){
                
            }
            i = r;
            while(l>=0 && r<s.size() && s[l]== s[r]){
                l--;
                r++;
            }
            int len = r-l-1;
            if(maxLen < len){
                maxLen = len;
                begin = l+1;
            }
        }
        return s.substr(begin,maxLen);
    }

236. 二叉樹(shù)的最近公共祖先

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root == NULL || root == p || root == q){
            return root;
        }
        TreeNode *left = lowestCommonAncestor(root->left,p,q);
        TreeNode *right = lowestCommonAncestor(root->right,p,q);
        if(left != NULL && right != NULL){
            return root;
        }
        return (left != NULL)?left:right;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市则拷,隨后出現(xiàn)的幾起案子贡蓖,更是在濱河造成了極大的恐慌,老刑警劉巖煌茬,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斥铺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坛善,警方通過(guò)查閱死者的電腦和手機(jī)晾蜘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)眠屎,“玉大人剔交,你說(shuō)我怎么就攤上這事「鸟茫” “怎么了岖常?”我有些...
    開(kāi)封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)燎字。 經(jīng)常有香客問(wèn)我腥椒,道長(zhǎng),這世上最難降的妖魔是什么候衍? 我笑而不...
    開(kāi)封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任笼蛛,我火速辦了婚禮,結(jié)果婚禮上蛉鹿,老公的妹妹穿的比我還像新娘滨砍。我一直安慰自己,他們只是感情好妖异,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布惋戏。 她就那樣靜靜地躺著,像睡著了一般他膳。 火紅的嫁衣襯著肌膚如雪响逢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天棕孙,我揣著相機(jī)與錄音舔亭,去河邊找鬼。 笑死蟀俊,一個(gè)胖子當(dāng)著我的面吹牛钦铺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肢预,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼矛洞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了烫映?” 一聲冷哼從身側(cè)響起沼本,我...
    開(kāi)封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窑邦,沒(méi)想到半個(gè)月后擅威,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冈钦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年郊丛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞧筛。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厉熟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出较幌,到底是詐尸還是另有隱情揍瑟,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布乍炉,位于F島的核電站绢片,受9級(jí)特大地震影響滤馍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜底循,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一巢株、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熙涤,春花似錦阁苞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至等舔,卻和暖如春骚灸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慌植。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工逢唤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涤浇。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓鳖藕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親只锭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子著恩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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