牛客习题总结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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章