《剑指offer》第三章 16-26题解

Python版剑指Offer题解 Python版剑指Offer题解 本题解配合leetcode中剑指Offer刷题使用 参考链接:图解算法数据结构 文章目录剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 05. 替换空格剑指 Offer 06. 从尾到头打印链表剑指 Offer 07. 重建二叉树剑指 Offer 09. 用两个栈实现队列剑指 Offer 10- I. 斐波那契数列剑指 Offer 10- II. 青蛙跳台阶问题剑指 Offer 11. 旋转数组的最小数字剑指 Offe 阅读详情

第三章 高质量代码

1.代码的完整性

剑指 Offer 16. 数值的整数次方

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

输入:x = 2.00000, n = 10
输出:1024.00000

输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
  • 初始解法:x*x重复n-1次。但这种情况下没有考虑n为负数和零。
  • 完整解法:应该对负数进行-操作,对于零应该抛出异常。但这种方法需要在循环中n-1次乘法。
  • 优化:考虑利用递归可以求出x的n次方,即先求出xn/2,而xn/2可以由xn/4求出。即如果n是奇数,相当于多乘一次本身,而偶数可以直接递归平方求出。
    • **利用右移运算代替/2运算,用位与运算代替求余运算判断奇偶性。**位运算的效率比乘除以及求余效率要高。

考验思维的全面性

    double myPow(double x, int n) {
        if(x == 1|| n == 0) return 1;
        if(n == 1) return x;

        long exp = (long)n;
        if(exp > 0){
            double res = myPow(x, exp>>1);
             res *= res;
             if(exp&1) res *= x;
             return res;
        }
        if(n < 0){
            double res = myPow(x, (-exp)>>1);
            res *= res;
            if(exp&1) res *= x;
            return 1/res;
        }
        return 0;
    }
剑指 Offer 17. 打印从1到最大的n位数

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

方法一:用字符串模拟数字加法。

首先要考虑到当n很大的时候(比如100),打印出来的数很有可能是超过了INT_MAX的范围的,所以我们用字符串来表示每个数。

当然,在这一题中,由于返回的是一个 int 型的数组,所以是不可能超过INT_MAX的,但是一般大数问题都不会要求返回 int 数组来保存每一位数,而是循环输出每一位数。

我们的思路就是,假设 n = 3,就定义一个字符串,初始化为 “000”,然后用它来循环模拟从1到最大的n位数,并循环保存到 int 数组中(在真实情况下则是循环输出)。

意识到是大数问题。

利用在加1时第一个字符产生了进位,则已经是最大的n位。

按照阅读习惯,字符串“00980”需要输出为980而不是00980。

    vector<int> output;
    vector<int> printNumbers(int n) {
        if(n <= 0) return vector<int>(0);
        string s(n,'0');//用字符串来表示大数,例如n=3
        while( !increment(s) ) outputNumbers(s);//increment实现字符串上+1,如果返回true,表示已经到达最大值999
        return output;
    }

    bool increment(string & s){//模拟数字的累加过程,并判断是否越界(即 999 + 1 = 1000,就是越界情况
        bool isOverFlow = false;//默认情况下没有到达最大值
        int carry = 0;//carry表示进位
        for(int i = s.size()-1; i >= 0; --i){
            int cur = s[i] - '0' + carry;//cur表示当前这次操作
            if(i == s.size()-1) ++cur;//如果此时i在个位,cur进行+1,相当于对字符串s中表示的数字进行累加过程
            if(cur >= 10){//如果当前操作cur大于10,表示可能要进行进位
                if(i == 0) isOverFlow = true;//假如已经在最大位,而current++之后>=10,说明循环到头了,即999 + 1 = 1000
                else{//只是普通进位
                    carry = 1;
                    s[i] = cur - 10 + '0';//去除进位10以后,转换为字符的形式
                }
            }else{//如果没有进位,更新s[i]的值,然后跳出循环,表示本次累加结束,去将本次累加结果存到输出,等待下次累加操作
                    s[i] = cur + '0';
                    break;
            }
        }
        return isOverFlow;
    }
    
   void outputNumbers(string s){
        // 本函数用于循环往output中添加符合传统阅读习惯的元素。比如001,我们会添加1而不是001。
        bool isFirtNonZero = false;// 判断是否经过第一个非‘0’,比如0010前面的两个0
        string temp = "";
         for(int i=0; i<s.length(); ++i){
            if(!isFirtNonZero && s[i] != '0') isFirtNonZero = true;
            if(isFirtNonZero) temp += s[i];//如果已经经过第一个非零字符,后面的‘0’需要保留
        }
        output.push_back(stoi(temp));
    }

方法二:递归全排列解法。

假设 n = 3,要输出的数其实就是三位数的全排列(000,001,002,…,999,当然 000 不能输出),我们用递归来表示出这个过程即可。注意000,以及前缀0不能打印出来。

没想到stoi这个函数这么强大,stoi(str);

如果 s = “000”,则temp会是空,那么不进行输出;而且stoi会自动把“009”这类字符串转化成数字9,自动把前缀0去掉。

不过在实际面试中,大概率最后要求输出的是string,就不能使用stoi函数了,那么最后还是需要借助方法1的outputNumbers函数,去掉前缀0,只不过为了防止输出“000”,需要把37行修改成if(temp != "") output.push_back(stoi(temp));

   vector<int> printNumbers(int n) {
        if(n <= 0) return vector<int>(0);
        vector<int> output;
        string s(n,'0');
        allArrange(s, output, 0);
        return output;
    }
    void allArrange(string &s, vector<int> &output, int pos){
        if(pos == s.size()){//递归停止条件是已经修改了字符串的最后一位
            int temp = stoi(s);//如果 s = "000",则temp会是空,那么不进行输出;而且stoi会自动把“009”这类字符串转化成数字9,自动把前缀0去掉
            if(temp) output.push_back(temp);
            return;
        }
        for(int i = 0; i < 10; ++i){
            s[pos] = i + '0';
            allArrange(s, output, pos + 1);
        }
    }
剑指 Offer 18. 删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。

输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

从头结点开始顺序查找,通过检查head->next->val == val来找到待删除结点的前一个结点,head ->next = head->next->next。

剑指offer和此题有区别:剑指上面直接给出了待删的结点ListNode,所以它和它的下一个节点可以直接找到,不需要从头遍历,直接把该节点的下一个节点值复制到待删结点,再把下一个结点删除,达到了删除这个结点的效果。但如果next为空是尾节点,就需要从头遍历,把待删结点的前一个结点next指向空。

    ListNode* deleteNode(ListNode* head, int val) {
        if(!head) return nullptr;
        if(head->val == val) return head->next;//如果要删除的点是头结,直接令head指向next,这样如果链表只有一个节点,则为空,如果不是一个节点,则相当于把头结点删掉。
        ListNode* dummy = head;//dummy保存头结点
        while(head->next){//这样找到的head是待删除结点的前一个结点
            if(head->next->val == val){
                head->next = head->next->next;
                break;
            }else{
                head = head->next;
            }
        }
        return dummy;
    }
剑指 Offer 20. 表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

数值(按顺序)可以分成以下几个部分:

  1. 若干空格
  2. 一个 小数 或者 整数
  3. (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数
  4. 若干空格

小数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符(’+’ 或 ‘-’)
  2. 下述格式之一:
    1. 至少一位数字,后面跟着一个点 ‘.’
    2. 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字
    3. 一个点 ‘.’ ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符(’+’ 或 ‘-’)
  2. 至少一位数字
//状态机
bool isNumber(string s) {
        if(s.empty()) return false;
        int n = s.size();
        int index = -1;
        bool hasDot = false,hasE = false, hasOp = false,hasNum = false;

        while(index < n && s[++index] == ' ');//把字符串前面的空格去掉
        while(index < n){
            if('0' <= s[index] && s[index] <= '9') hasNum = true;
            else if(s[index] == 'E' ||  s[index] == 'e'){
                if(hasE || !hasNum) return false;//如果已经有E了,或者前面没有数字,则直接返回false
                hasE = true;
                hasOp = false; hasDot = false; hasNum = false;//后面就要重置,因为e后面这些都可以跟
            }else if(s[index] == '+' || s[index] == '-'){
                if(hasOp || hasNum || hasDot) return false;//加号前面不能有加减号、数字(否则就是表达式)和小数点
                hasOp = true;
            }else if(s[index] == '.'){
                if(hasDot || hasE) return false;
                hasDot = true;
            }else if(s[index] == ' ') break;//有空格直接退出
            else return false;
            ++index;
        }
        while(index < n && s[++index] == ' ');//把后面得空格去掉
        return hasNum && (index == n);
    }
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

输入:nums = [1,2,3,4]
输出:[1,3,2,4] 
注:[3,1,2,4] 也是正确的答案之一。
    vector<int> exchange(vector<int>& nums) {
        int n = nums.size();
        if(n <= 1) return nums;
        int left = 0,right = n-1;
        while(left < right){
            while( left < right && (nums[left]&1) == 1){//如果left是奇数,就一直右移,直到碰到偶数
                ++left;
            }
            while(left < right && (nums[right]&1) == 0){//如果right是偶数,就一直左移,直到碰到奇数
                --right;
            }
            if(left < right) swap(nums[left],nums[right]);//如果能换,就交换奇偶数的位置
        }
        return nums;
    }

这道题如果扩展成按照数组大小,能否被3整除等条件,分为前后两部分,为了使代码具有可扩展性。把整个函数解耦成两个部分:一是判断数字应该在数组前半部分还是后半部分的标准;二是拆分数组的操作。

2.代码的鲁棒性

剑指 Offer 22. 链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.

应注意代码鲁棒性:如果k的大小超过链表的长度,则返回空。

    ListNode* getKthFromEnd(ListNode* head, int k) {
        if(!head || k == 0) return nullptr;
        ListNode * slow = head,* fast = head;
        while(fast && k){
            --k;
            fast = fast->next;
        }
        if(k) return nullptr;//如果k的大小超过链表的长度,则返回空
        while(fast){
            fast = fast->next;
            slow = slow->next;
        }
        return slow;
    }
剑指 Offer 24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
/*非递归
    ListNode* reverseList(ListNode* head) {
        ListNode *pre = nullptr,*cur = nullptr;
        while(head){
            cur = head->next;//用cur保存修改当前节点之前的指向
            head->next = pre;//将当前head节点指向上一个节点
            pre = head;
            head = cur;
        }
        return pre;
    }*/
    //递归
    ListNode* reverseList(ListNode* head,ListNode *pre = nullptr) {
        if(!head) return pre;
        ListNode* cur = head->next;
        head->next = pre;
        return reverseList(cur,head);
    }
剑指 Offer 25. 合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/*原地合并,不开辟新节点
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(!l1) return l2;
        if(!l2) return l1;
        if(l1->val <= l2->val){
            l1->next = mergeTwoLists(l1->next,l2);
            return l1;
        }else{
            l2->next = mergeTwoLists(l2->next,l1);
            return l2;
        }
    }*/
    //开辟新节点
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2){
        if(!l1) return l2;
        if(!l2) return l1;
        ListNode* mergeHead = nullptr;
        if(l1->val <= l2->val){
            mergeHead = l1;
            mergeHead->next = mergeTwoLists(l1->next,l2);
        }else{
            mergeHead = l2;
            mergeHead->next = mergeTwoLists(l2->next,l1);
        }
        return mergeHead;
    }
剑指 Offer 26. 树的子结构

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)。B是A的子结构, 即 A中有出现和B相同的结构和节点值。

例如:给定的树 A:
     3
    / \
   4   5
  / \
 1   2
给定的树 B:
   4 
  /
 1
 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。

与二叉树相关的代码,在每次使用指针的时候,都首先问自己这个指针有没有可能是nullptr,如果是nullptr是怎么处理。

    bool isSubStructure(TreeNode* A, TreeNode* B) {//递归在A中寻找 与B根节点 相同的节点
        if(!A || !B) return false;//
        bool flag = false;
        if(A->val == B->val) flag = isStructure(A, B);
        if(flag) return true;
        else{
            return isSubStructure(A->left,B) || isSubStructure(A->right,B);
        }

    }
    bool isStructure(TreeNode* A, TreeNode* B){//判断A和B树的结构是否完全一样
        if(!B) return true;//如果B已经遍历结束,直接返回true
        if(!A || A->val != B->val) return false;
        return isStructure(A->left,B->left) && isStructure(A->right,B->right);//如果当前节点相同,就去看他们的左右子节点是否相同
    }
告别算力焦虑:手把手教你用华为CloudMatrix384超节点部署MoE大模型(附xDeepServe配置) 本文详细解析了如何在华为CloudMatrix384超节点上高效部署MoE大模型,通过xDeepServe框架配置和专家分配优化,实现2300 Tokens/s的推理吞吐。文章涵盖环境准备、性能调优、成本平衡及容灾设计,帮助开发者告别算力焦虑,提升AI推理效率。 阅读详情

相关推荐

Uni-App推送踩坑实录:从云函数URL化到后台推送失效,我都经历了什么

本文详细记录了Uni-App开发者在接入uni-push 2.0时遇到的推送失效问题,从云函数URL化到后台推送失效的完整排查过程。通过系统化分析和与官方沟通,最终找到解决方案,并分享了预防措施与最佳实践,帮助开发者避免类似问题。

weixin_42552716的博客 485

《剑指offer》读书笔记系列-3

《剑指offer》读书笔记——第三章:高质量的代码一、面试官谈代码质量二、代码的规范性三、代码的完整性1.数组2.字符串3.链表4.树5.栈和队列四、算法和数据操作1.查找和排序2.递归和循环3.位运算总结 一、面试官谈代码质量 写代码需要考虑到异常状况、边界情况、资源回收等场景,不能只是针对正常值的处理,同时对变量、函数命名要有章法可循。 二、代码的规范性 规范的代码书写清晰(这里说的是远古时期在纸上或者白板上写代码的情况)。 规范的代码布局清晰(同上)。 规范的代码命名合理(大驼峰、小驼峰)。 三

weixin_53045863的博客 247

安时积分法和开路电压法结合估算锂电池SOC

基于安时积分法和开路电压法结合的锂电池SOC估计Simulink仿真建模,利用安时积分法计算放电过程中的SOC,在搁置状态利用开路电压法进行SOC修正。

qq_39304296的博客 2552

剑指offer第三章刷题

前言:代码质量包括规范性(布局清晰,命名合理,手写能认出来),代码的完整性(功能测试,边界测试,负面测试) 文章目录1.数值的整次方2.打印从1到最大的n位数 1.数值的整次方 题目描述 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 示例 3: 输入:

weixin_45593271的博客 688

SAP 小结

关于SAP 开发的实习就要告一段落了,从刚开始接触,到现在已经6个月了,想要很简要的把自己对SAP的理解写出来,便于以后查阅(不定期更新)。 1. 什么是SAP? 广义的SAP,可以指代SAP公司以及SAP的各种产品,它的意义要在特定语境下才能确定。一般我们所说的SAP特指SAP ERP。 SAP ERP(enterprise resource planning)是一个企业信息系统。通过这个系

Remy的博客 1950

怎么定位K8s容器中运行的JAVA程序OOM异常(一)

一.前置环境 1. 运行在k8s集群上的Pod服务(Java程序) 2. MAT分析工具 二.利用Jmap工具导出Heap Dump 1.执行命令进入pod容器 kubectl exec -itn {namespace} {pod}} sh 2.利用jmap生成java程序的Dump文件 jps | grep {jar} ./jmap -dump:live,format=b,file=haep.hprof 8 3.利用k8s命令导出Dump文件到本地 kubectl cp -n

计算科学 3013

剑指offer-第3章

代码的规范性 用完整的英文单词组合命名变量和函数 代码的完整性 基本功能:功能测试 边界测试 负面测试:不合规范的非法输入 3种错误的处理方法: 1、返回值:优点:和系统API一致,缺点:不方便使用计算结果 2、全局变量:优点:能够方便地使用计算结果,缺点:用户可能会忘记检查全局变量 3、异常:优点:可以为不同的出错原因定义不同异常类型,逻辑清晰明了 缺点:有些语言不支持异常,抛出异常对性能有负面影响 面试题11:数值的整数次方 题目:实现函数double Power(double base,int e

s20122502的博客 270

【滤波跟踪】多雷达协同下的多目标跟踪:航迹管理优化与卡尔曼滤波融合策略

本文深入探讨了多雷达协同下的多目标跟踪技术,聚焦于航迹管理优化与卡尔曼滤波融合策略两大核心。通过分析分布式融合架构、航迹关联算法(如匈牙利算法)以及应对非线性与机动目标的扩展卡尔曼滤波(EKF)与无迹卡尔曼滤波(UKF)等方法,旨在解决多源信息融合难题,提升复杂环境下目标跟踪的精度与鲁棒性。

weixin_29214199的博客 280

剑指offer题解 python_剑指offer 第三章 题16-26题解 Python版

代码完整性基础功能;输入边界值;错误处理;题16:数值的整数次方此题不需要考虑大数问题,仅仅是计算整数次方,所以处理好特殊值就行了。class Solution:def Power(self, base, exponent):"""计算base的exponent次方Arguments:base {int} -- 整数exponent {int} -- 指数,可正可负Returns:int -- 结...

weixin_39969976的博客 110

Android Jetpack 最全面试题及参考答案

要使用 WorkManager 定义一个异步任务,以下是详细步骤。首先,需要创建一个继承自 Worker 类的自定义类,这个类代表了要执行的具体任务逻辑。// 在这里编写具体的任务逻辑,比如从网络下载文件try {在上述代码中,doWork方法就是任务的核心执行逻辑所在,这里模拟了从给定的 URL 下载文件到本地的操作,若下载成功返回,若出现异常则返回。然后,在需要调度任务的地方,比如在某个 Activity 或者 Fragment 中,通过构建 WorkRequest 来安排任务执行。

大模型大数据攻城狮的专栏 1893

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033

[剑指offer] JAVA版题解(完整版)

本文首发于我的个人博客:尾尾部落 序号 题解 牛客 OJ 数据结构类型 03 [剑指offer] 二维数组中的查找 二维数组中的查找 数组 04 [剑指offer] 替换空格 替换空格 字符串 05 [剑指offer] 从尾到头打印链表 从尾到头打印链表 链表 06 [剑指offer] 重建二...

尾尾部落 6万+

7、树莓派故障排查全攻略

本文详细介绍了树莓派在使用过程中常见的各类故障及其排查方法。内容涵盖键盘鼠标诊断、电源诊断、显示诊断、启动诊断、网络诊断以及紧急内核的使用,提供了具体的解决方法和实用建议。同时,文章总结了故障排查流程、常见故障及解决方法的汇总,并给出了注意事项和操作建议,帮助用户高效解决树莓派使用过程中的问题,确保其稳定运行。

cream的博客 322

《剑指offer》Java版全系列题解(2021版,持续更新!)

《剑指offer》Java版全系列题解(2021版,持续更新!) 本系列记录了最新版 《剑指Offer》 的题解过程与代码,因为原书是c语言。这里用Java代码复现并优化,并包含解题分析。 希望各位能够点赞,收藏!关注我! 每日更新! 如果在准备java面试,可以看看我的另外一篇文章! Java面试复习体系总结(2021版,持续更新) csdn题解(包含详细分析过程,代码) 力扣链接 剑指Offer系列(java版,详细解析) 03. 数组中重复的数字 剑指 Offer 03. 数组中重复

Viper的程序员修炼手册 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《剑指Offer》题解汇总索引表(leetcode)

《剑指Offer》题解汇总索引表(leetcode) ???? 文章目录《剑指Offer》题解汇总索引表(leetcode)[【LeetCode】《剑指Offer》第Ⅰ篇⊰⊰⊰ 3 - 11题](https://blog.youkuaiyun.com/weixin_44368437/article/details/114194973)[【LeetCode】《剑指Offer》第Ⅱ篇⊰⊰⊰ 12 - 19题](https://blog.youkuaiyun.com/weixin_44368437/article/details/114

像写诗一样优雅地写代码~ 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《剑指offer》75题 C++详细题解

刷题快乐~

MuqiuWhite的博客 5474

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【吐血整理】LeetCode与剑指Offer百道经典题解总结

本文整理了LeetCode与剑指Offer中百余道经典的题目,整理出了数组、字符串、链表、二叉树、栈、回溯、动态规划、位运算中的经典问题以及问题对应的链接地址和个人提供的题解,方便查阅以及练习。以下是百题的索引,点击即可找到题目的出处并练习,也可直接查阅答案。 建议刚开始刷题的朋友直接按一下的Tag分类一个专题一个专题地进行学习与作答,完全理解这一百题,一线大厂非你莫属。

BoringError的博客 3891

剑指Offer 67题 C++题解

从2月底开始找工作,到今天,经历了两个月的时间终于得到了百度的offer。今年除去疫情影响的因素,春招难度确实很大。还要加强 代码能力 和 基础能力 。 剑指Offer 67题题解,C++版。从今天开始我会重新在做一遍,整理出完整的 题解思路 以及 AC代码 。 题解完成情况:0/67。 文章目录1.题目(1) 二维数组中的查找(2) 替换空格2.更新日志 1.题目 (1) 二维数组中的查...

x_mn的博客 1780

刷题——[剑指 offer] JAVA 版题解

序号 题解 牛客 OJ 数据结构类型 03 [剑指 offer] 二维数组中的查找 二维数组中的查找 数组 04 [剑指 offer] 替换空格 替换空格 字符串 05 [剑指 offer] 从尾到头打印链表 从尾到头打印链表 链表 06 [剑指 offer] 重建二叉树 重建二叉树 ...

程序员世杰 2296

【目录】LeetCode《剑指Offer》java题解分类汇总

1.链表 1.剑指Offer06从头到尾打印链表java题解 2.剑指 Offer 18. 删除链表的节点java题解 3.剑指 Offer 22. 链表中倒数第k个节点java题解 4.剑指 Offer 24. 反转链表Java题解 5.剑指 Offer 25. 合并两个排序的链表Java题解 6.剑指 Offer 35. 复杂链表的复制java题解 7.剑指 Offer 36. 二叉搜索树与双向链表java题解 8.剑指 Offer 52. 两个链表的第一个公共节点java题解 2.树 1.剑指 Off

乾坤未定,你我皆是黑马 1109

剑指offer总目录

剑指offer总目录算法有多重要?为什么要写《剑指offer》专栏题解?目录1~10题11~20题21~30题31~40题41~50题51~60题61~65题刷题网站 算法有多重要? 为什么要写《剑指offer》专栏题解? 目录 1~10题 1.二维数组中的查找 2.替换空格 3.从头到尾打印链表 4.重建二叉树 5.用两个栈实现队列 6.旋转数组的最小数 7.斐波那契数列 8.跳台...

Accept 3501

剑指offer(第二版) Python3实现

剑指offer Python题解 03.数组中重复的数字 04.二维数组中的查找 05.替换空格 06.从尾到头打印链表 07.重建二叉树 08.二叉树的下一个节点 09.用两个栈实现队列 10.斐波那契数列 11.旋转数组中的最小数字 12.矩阵中的路径 13.机器人的运动范围 14.剪绳子 15.二进制中 1 的个数 16.数值的整数次方 17.打印从1到最大的n位数 18.删除列表中重复的...

算法探索之路 7374

【C++题解】剑指offer第二版,面试必备专栏

📚专栏目标:剑指offer系列题解📣专栏定位:为找工作的小伙伴整理常考算法题解,祝大家都能成功上岸!🎏唠叨唠叨:在这个专栏里,我会整理所有剑指 offer 第二版的题解,这里面的思路也参考了各个大佬。一方面我希望通过这个专栏加深我对于剑指 offer 题目的理解,另一方面也想将所有题目整合在一起方便大家参考。

Newin2020的博客 2252

剑指offer题解汇总

目录 题号 题目名称 1 二维数组中的查找 2 替换空格 3 从尾到头打印链表 4 重建二叉树 5 用两个栈实现队列 6 旋转数组的最小数字 7 斐波那契数列 8 跳台阶 9 变态跳台阶 10 矩形覆盖 未完待续·· Note 代码地址:Github 剑指offer刷题总结 (代码已编号) 有些解法博文中未实现,不代表一定很难,可能只是因为......

编码强迫症患者 1345

剑指Offer题集(力扣)

力扣题单:https://leetcode.cn/problemset/all/?listId=lcof&page=1

qq_42958831的博客 1万+

大神整理的剑指Offer【所有面试题汇总】

    剑指Offer学习   剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代码下载【https://github.com/Wang-Jun-Chao/coding-interviews】 目录 第01-10题 【剑指Offer学习】【面试题02:...

晓飛的博客 3万+
上一篇: 《剑指offer》第2章 03-15题解
下一篇: 《剑指offer》第四章 27-38
Netfishless
博客等级 码龄9年 3640粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值