牛客習題總結23(6月25日)

在這裏插入圖片描述
棧是限定在一端進行插入與刪除的線性表,允許插入與刪除的一端稱爲棧頂,不允許插入與刪除的另一端稱爲棧底。棧按照“先進後出”(FILO)或“後進先出”(LIFO)組織數據,棧具有記憶作用
在這裏插入圖片描述

在這裏插入圖片描述

尾遞歸是指,在函數返回的時候,調用自身本身,並且,return語句不能包含表達式。這樣,編譯器或者解釋器就可以把尾遞歸做優化,使遞歸本身無論調用多少次,都只佔用一個棧幀,不會出現棧溢出的情況。 尾遞歸調用時,如果做了優化,棧不會增長,因此,無論多少次調用也不會導致棧溢出。 遺憾的是,大多數編程語言沒有針對尾遞歸做優化,
在這裏插入圖片描述
在這裏插入圖片描述

我理解的最少的比較次數是當一個有序表A的所有元素都大於另一個有序表B的所有元素時。

當A表中的第一個元素與B表中的所有元素比較一次,並發現該元素大於B表中的最大元素時,

A表剩下的所有元素都不需要再比較,直接依次添加在B表的末尾。

該過程一共比較了N次
在這裏插入圖片描述
總共有5行,所以有5個頂點。
在無向圖裏,矩陣裏任意兩個1爲兩個頂點的連線,總共有8對。所以邊數爲8。
在這裏插入圖片描述

import java.util.*;

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
public class Main2 {
    public ListNode plusAB(ListNode a, ListNode b) {
        // write code here
        ListNode result = new ListNode(-1);
        ListNode resultCur = result;
        //nextNum表示進位
        int nextNum = 0;
        while (a != null || b != null || nextNum != 0) {
            //獲取兩個鏈表裏 的值從而進行相加
            int aval = (a != null)?a.val:0;
            int bval = (b != null)?b.val:0;
            //第一次的相加得出的進位要給第二次里加
            int sum = aval+bval+nextNum;
            //算出相加的產生的進位
            nextNum = sum/10;
            //算出要往新鏈表里加的值
            int realSum = sum%10;
            resultCur.next = new ListNode(realSum);
            resultCur = resultCur.next;
            //爲第二次相加做準備
            a = a!=null?a.next:null;
            b = b!=null?b.next:null;
        }
        return result.next;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章