leetcode刷题笔记

栈和队列 

序号                   题目                              笔记  日期
1

剑指 Offer 09. 用两个栈实现队列

栈是一种先进后出的数据结构,队列却是一种先进先出的数据结构。根据栈先进后出的特性,我们每次往第一个栈里插入元素后,第一个栈的底部元素是最后插入的元素,第一个栈的顶部元素是下一个待删除的元素。

push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。

push(x) -- 元素 x 入栈

pop() -- 移除栈顶元素

top() -- 获取栈顶元素

empty() -- 返回栈是否为空

//用两个栈实现队列
class CQueue {
    Deque<Integer>stack1;
    Deque<Integer>stack2;

    public CQueue() {
        stack1=new LinkedList<Integer>();
        stack2=new LinkedList<Integer>();

    }
    
    public void appendTail(int value) {
       stack1.push(value);//元素压栈

    }
    
    public int deleteHead() {
        //如果第二个栈为空栈
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());//第一个栈里的元素一个个弹出插入到第二个栈里
            }
        }
        //删除操作直接弹出第二个栈的元素返回即可
        if(stack2.isEmpty()){
            return -1;
        }else{
            int deleteItem=stack2.pop();
            return deleteItem;
        }

    }
}

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */

链表

序号                   题目                              笔记  日期
1

剑指 Offer 06. 从尾到头打印链表

栈的特点是后进先出,使用栈将链表元素顺序倒置。
2

剑指 Offer 25. 合并两个排序的链表

使用双指针 l_1l1​ 和 l_2l2​ 遍历两链表

初始化一个辅助节点 dumdum 作为合并链表的伪头节点,将各节点添加至 dumdum 之后

3

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
        Stack<ListNode> stack = new Stack<ListNode>();//创建一个栈,用于存储链表的节点
        ListNode temp = head;//创建一个指针,初始时指向链表的头节点
        while (temp != null) {//将指针指向的节点压入栈内
            stack.push(temp);
            temp = temp.next;//将指针移到当前节点的下一个节点
        }
        int size = stack.size();//获得栈的大小 size,创建一个数组 print,其大小为 size
        int[] print = new int[size];
        for (int i = 0; i < size; i++) {
            print[i] = stack.pop().val;
        }
        return print;
    }
}

二叉树

序号                   题目                              笔记  日期
1

剑指 Offer 27. 二叉树的镜像

交换每个节点的左 / 右子节点,递归地对树进行遍历,并从叶子节点先开始翻转得到镜像

数组

  • for(int num:nums){}

  • 含义:遍历数组nums中的所有元素,循环体中nums[i]用num替代,num == nums[i]

  • int rows = matrix.length, columns = matrix[0].length;

序号                   题目                              笔记  日期
1

剑指 Offer 03. 数组中重复的数字

利用数据结构特点,容易想到使用哈希表(Set)记录数组的各个数字,当查找到重复数字则直接返回
2

剑指 Offer 04. 二维数组中的查找

依次遍历二维数组的每一行和每一列
3

剑指 Offer 11. 旋转数组的最小数字

利用二分法查找

字符串

序号                   题目                              笔记  日期
1

剑指 Offer 05. 替换空格

遍历列表 s 中的每个字符 c,利用到字符串数组toCharArray,append在列表末尾添加新的对象。
2

3

动态规划

一二题有什么区别

二?为什么

序号                   题目                              笔记  日期
1

剑指 Offer 10- I. 斐波那契数列

  F(n)=F(n−1)+F(n−2),斐波那契数列问题: f(0)=0, f(1)=1 , f(2)=1 
2

剑指 Offer 10- II. 青蛙跳台阶问题

F(n)=F(n−1)+F(n−2),f(0)=1, f(1)=1 , f(2)=2 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值