程序员代码面试指南&剑指offer 刷题总结

本文精选《剑指Offer》及《程序员代码面试指南》中的经典面试题,涵盖递归、贪心策略、动态规划、图与回溯法等算法类别,深入解析包括斐波那契数列、跳台阶、矩阵中的路径、股票买卖最佳时机等问题,提供高效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 递归

10 斐波那契数列 JZ7

跳台阶 JZ8

矩形覆盖 JZ10

38 字符串的排列 JZ27

求N!

汉诺塔问题

求字符串所有子序列

母牛的数量

2 贪心策略

变态跳台阶 JZ9

45 把数组排成最小的数 JZ32

14 剪绳子 JZ67

分金条的最小花费CD51

做项目的最大收益问题CD50

3 动态规划

4 图&回溯法

12 矩阵中的路径 JZ65

13 机器人的运动范围 JZ66

5 数组

未排序正数组中,累加和为给定值的最长子数组长度

给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k。求arr的所有子数组中所有元素相加和为k的最长子数组的长度

6 栈和队列

JZ59.1队列实现栈225

JZ59.2栈实现队列232

JZ20 包含min函数的栈 155

JZ64 滑动窗口的最大值

JZ21 栈的压入、弹出序列

7 矩阵

29 顺时针打印矩阵(54. Spiral Matrix)(系列)

旋转矩阵

旋转图像
例如,arr = [1, 2, 1, 1, 1], k = 3
累加和为3的最长子数组为[1, 1, 1],所以结果返回3

[要求]
时间复杂度为O(n),空间复杂度为O(1)

输入描述:

  • 第一行两个整数N, k。N表示数组长度,k的定义已在题目描述中给出
  • 第二行N个整数表示数组内的数

输出描述:

  • 输出一个整数表示答案

8 树

1 二叉树的深度

2 二叉树的先序、中序、后序遍历(递归,非递归)

3 二叉树的序列化、反序列化

4 平衡二叉树

5 中序遍历的后继、前级节点

补充题目

63 买股票的最佳时机

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

在这里插入图片描述

class Solution {
public:
    int maxProfit(vector<int>& prices) 
    {
        if (prices.empty() || prices.size() < 2)
            return 0;
        int min_price = prices[0];  
        int max_profit = prices[1] - min_price;
        for (int i = 1; i < prices.size(); i++)
        {
            if (prices[i] > min_price)
            {
                if (prices[i] - min_price > max_profit)
                {
                    max_profit = prices[i] - min_price;
                }      
            }    
            if (prices[i] < min_price)
                min_price = prices[i];
        }
        return max_profit>0?max_profit:0; //如果是递减数列,则小于0
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值