《剑指offer》Java版

牛客网剑指Offer - java 剑指Offer - java 文章目录剑指Offer - javaJZ01JZ02 替换空格JZ03 从尾到头打印链表JZ04 重建二叉树JZ05 用两个栈实现队列JZ06 旋转数组的最小数字JZ07 斐波那契数列JZ08 跳台阶问题JZ09 青蛙跳台阶JZ10 矩形覆盖JZ11 二进制中1的个数JZ12 数值的整数次方JZ13 调整数组顺序,使奇数位于偶数前面JZ14 链表中倒数第k个结点JZ15 反转链表JZ16 合并两个排序的链表JZ17 树的子结构JZ18 二叉树的镜像JZ19 顺时针打印矩阵J 阅读详情

一、引言
《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。

二、目录
1赋值运算函数
2单例设计模式
3二维数组中查找目标值
4替换字符串中的空格
5从尾到头打印链表
6由前序和中序遍历重建二叉树
7用两个栈实现队列

8求旋转数组的最小数字
9斐波那契数列的第n项(青蛙跳台阶)
10二进制中1的个数
11数值的整数次方
12打印1到最大的n位数
13O(1)时间删除链表节点
14使数组中的奇数位于偶数前面
15找链表中倒数第K个节点
16输出反转后的链表
17合并两个有序链表
18判断二叉树A中是否包含子树B
19二叉树的镜像
20顺时针打印矩阵

21包含min函数的栈
22判断一个栈是否是另一个栈的弹出序列
23层序遍历二叉树
24后序遍历二叉搜索树
25二叉树中和为某值的路径

26复杂链表的复制
27二叉搜索树转换为双向链表
28打印字符串中所有字符的排列
29数组中出现次数超过一半的数字
30找出最小的K个数
31连续子数组的最大和

32从1到整数n中1出现的次数
33把数组中的数排成一个最小的数
34求第N个丑数
35第一个出现一次的字符
36数组中逆序对的个数
37两个链表的第一个公共节点
38数字在排序数组中出现的次数
39二叉树的深度
40数组中只出现一次的两个数,而其他数都出现两次。
41和为s的连续整数序列
42翻转字符串
43n个骰子的点数及出现的概率
44扑克牌的顺子
45圆圈中最后剩下的数
46 1+2+3+…+n的和
47不用加减乘除做加法
48不能被继承的类
49字符串转换为整数
50树中两个节点的最低公共祖先
51找出重复的数
52构建乘积数组
53正则表达式匹配
54表示数值的字符串
55字符流中第一个不重复的字符
56链表中环的入口节点
57删除链表中重复的节点
58二叉树的下一个节点
59对称的二叉树
60按之字形顺序打印二叉树

61把二叉树打印成多行
62序列化二叉树
63二叉搜索树的第K个节点
64数据流中的中位数
65滑动窗口的最大值
66矩阵中的路径
67机器人的运动范围
注:加粗字体的题目是热门面试题。

三、代码实现
1-10题
11-20题
21-30题
31-40题
41-50题
51-67题
GitHub地址:https://github.com/GaoLeiQin/SwordOffer

四、PDF下载
免费下载网址:《剑指Offer》题目、思路及Java版代码(带目录修订版)
————————————————
版权声明:本文为CSDN博主「白夜行515」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baiye_xing/article/details/78428561

2 单例

https://blog.csdn.net/kris1025/article/details/104657059?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159399348919195239805004%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=159399348919195239805004&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v1~rank_blog_v1-3-104657059.pc_v1_rank_blog_v1&utm_term=%E5%8D%95%E4%BE%8B

静态内部类实现单例
public class SingletonPattern {

    private SingletonPattern() {
    }

    private static class SingletonPatternHolder {
        private static final SingletonPattern singletonPattern = new SingletonPattern();
    }

    public static SingletonPattern getInstance() {
        return SingletonPatternHolder.singletonPattern;
    }
}

数组

3 二维数组中查找目标值
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:从右上角或左下角开始找,逐行删除,或者用二分法查找

    public boolean find(int[][] array,int target) {
        if (array == null) {
            return false;
        }
        int row = 0;
        int column = array[0].length-1;

        while (row < array.length && column >= 0) {
            if(array[row][column] == target) {
                return true;
            }
            if(array[row][column] > target) {
                column--;
            } else {
                row++;
            }
        }
        return false;
    }

9.1 斐波拉齐数列第n 项
9.2.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路 :9.2和9.1 解法相同 使用非递归的解法(动态规划),效率上来说也会比递归好很多,不仅仅是因为递归会使得栈的深度变得很大,而且在递归的过程中,求解 getNums(n - 1) + getNums(n - 2) 时,在不同的 n 值下,还会产生很多重复的计算。而非递归的方式仅仅只是获取到之前的值使用,不存在重复的计算消耗。

// 1 递归

    
    public static int getFibonacci(int n) {
        if (n <= 1) return n;
        return getNums(n - 1) + getNums(n - 2);
    }
 

// 2 动态规划 循环
    public static int getFibonacci(int n) {
        if (n <= 1) return n;
        // 使用一个长度为 2 的数组存储前两位的值
        int[] nums = new int[] { 0, 1 };
        int result = 0;
        for (int i = 2; i <= n; i++) {
            result = nums[0] + nums[1];
            nums[0] = nums[1];
            nums[1] = result;
        }
        return result;
    }

//    
 public long fibonacci(int n) {
        long result=0;
        long preOne=1;
        long preTwo=0;
        if(n==0) {
            return preTwo;
        }
        if(n==1) {
            return preOne;
        }
        for (int i = 2; i <= n; i++) {
            result = preOne+preTwo;
            preTwo = preOne;
            preOne = result;
        }
        return result;
    }

9.3 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

思路:斐波那契数列思想

    public int Fibonaccik(int n) {
        int number = 1;
        int sum = 1;
        if (n <= 0)
            return 0;
        if (n == 1 ) {
            return 1;
        }

        while (n-- >= 2) {
            sum += number;
            number = sum - number;
        }
        return sum;
    }

9.4一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:2^(n-1)

代码实现:

    public int JumpFloor2(int target) {
        return (int) Math.pow(2,target-1);
    }

14使数组中的奇数位于偶数前面

	// 解法一:移动偶数位置,时间复杂度 O(n²),空间复杂度 O(1)
    public void reOrderArray(int[] array) {
        if (array == null || array.length == 0) {
            return ;
        }

        for (int i = 1; i < array.length; i++) {
            int
牛客网剑指offer——Java题解.pdf 立即下载

相关推荐

剑指前端offerPDF.pdf

HZFE团队一群大佬将前端面试内容整理成册,其github开源项目已经超过2.3K satar,此处收集整理成电子文档,分享给前端小伙伴们。 上述资源权归出方所有,资源上传仅供个人学习或研究使用,不得用于商业目的或未经授权的传播。

剑指Offer第二PDF+源码

剑指Offer》 百度网盘自己下载食用。 链接:https://pan.baidu.com/s/17ycDxG_wF1AEnhWA_tsKGA 提取码:3cfp

林夕07 1万+

剑指Offer精选题(含答案).pdf

最强面试题集合,大厂面试,基础到高级,吊打面试官

150页的剑指Offer解答PDF,它来了!!!

它来了!!! 终于整理出了第一剑指OfferPDF,主要以Java语言为主,一共67道题,100多页。 领取方式如下(无套路直接获取百度网盘的 ???? 链接,如果链接失效可以直接找我): 【秦怀杂货店】公众号内发送:剑指Offer 刷题仓库:CodeSolution ,具体的分类如下: 数组 剑指Offer(二)–二维数组中的查找 剑指Offer(十三)–调整数组顺序使奇数位于偶数前面 剑指Offer(十九)-- 顺时针打印矩阵 剑指Offer(二十八)-- 数组中次数出现超过一半的数字 剑指

秦怀杂货店 6950

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

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

程序员世杰 2259

剑指offerJava全系列题解(2021,持续更新!)

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

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

剑指Offerjava)》PDF高清下载

剑指Offerjava)》PDF高清下载 【下载地址】剑指OfferjavaPDF高清下载 《剑指OfferJava)》PDF高清文档,为Java程序员量身打造,全面收录了剑指Offer中所有面试题的Java实现。每段代码均经过精心编译和测试,确保准确无误,助你深入理解常见面试题的解题思路。通过学习这份文档,...

gitblog_06799的博客 549

剑指offerJAVA

                                                        &n...

小熊爱吃竹子的博客 225

剑指Offerjava)》PDF高清下载:面试必备编程实践指南

剑指Offerjava)》PDF高清下载:面试必备编程实践指南 【下载地址】剑指OfferjavaPDF高清下载 《剑指OfferJava)》PDF高清文档,为Java程序员量身打造,全面收录了剑指Offer中所有面试题的Java实现。每段代码均经过精心编译和测试,确保准确无误,助你深入理解常见面试题的解题思...

gitblog_06716的博客 470

剑指offer第2Java题解总结(下)

剑指offer第二Java题解

qq_41227539的博客 1141

剑指offerJava开源项目常见问题解决方案

剑指offerJava开源项目常见问题解决方案 项目基础介绍 《剑指offerJava开源项目是一个针对《剑指offer》一书中算法题的Java实现。该项目包含多种经典算法题的解法和思路,全部代码在在线评测系统(OJ)上通过测试。项目主要使用的编程语言是Java。 主要编程语言 Java 新手常见问题及解决方案 问题一:如何运行项目中的代码? 问题描述: 新手用户在下载项目后,不知道...

gitblog_00435的博客 344

剑指OfferJava代码:算法学习的宝库

剑指OfferJava代码:算法学习的宝库 在编程的世界里,算法是解决问题的核心。对于Java开发者而言,掌握算法不仅是提升编程技能的关键,也是在面试中脱颖而出的法宝。今天,我们要介绍的是一个开源项目——《剑指OfferJava代码,它不仅提供了丰富的算法题目,还附带了详细的解题思路和测试用例,是每位Java开发者不可多得的学习资源。 项目介绍 《剑指OfferJava代码项目,源自...

gitblog_00527的博客 387

剑指offerJAVA---史上最全

1.单例模式 Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。 这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 if (uniqueInstance == null) ,并且此时 uniqueInstance 为 null,那么会有多个线程执行 uniqueInstance = new Singleton(); 语句,这将导致实例化多次 uniqueIns

Amber8080的博客 1794

剑指offer第二(150M超清分享PDF+源码) 存在百度云(喜欢就点个赞评论一下)

链接:https://pan.baidu.com/s/1b6ZxVIBvjPfKifToh_h26Q 密码:6t76 https://github.com/zhedahht/ChineseCodingInterviewAppendix(代码) 如需要更多iOS书籍留言!!! 剑指offer 第二 包含 PDF和源码 各大公司的算法面试题,存在百度云...

不二的博客 1万+

三天刷完《剑指OFFER编程题》--Java本实现(第二天)

正在更新中。。。。。。。。。 剑指offer --Python本的实现: 剑指offer(1/3)第一大部分 剑指offer(2/3)第二大部分 剑指offer(3/3)第三大部分 27.字符串的排列 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 递归法,问题..

mike_jun的博客 1801

剑指Java面试:面试官能问到的问题,都被我收集在这份PDF文档里

拿到这个PDF之后,面试官所问到的知识点相信你都能答得上来!我自己靠着这一份PDF拿下了BAT+网易 美团等offer~希望你在拿到之后也能好好学习!面经中有他的知识点的答案,如下图示例,非常详细(文末有领取方式)!!!1.数据结构与算法篇你是java开发你就用java代码去实现个人觉得作为一名程序员,如果没有对数据结构与算法有深刻的认知,是无法成为一名优秀工程师,更别说架构师、技术专家。虽然平时写业务代码,有各种各样的内置函数库、开源类库、开源框架可以使用,满足日常需求自然没什么问题,但是!

m0_73311735的博客 253

剑指OfferII(专项突击Java 持续更新....

剑指 Offer(专项突击Java

hello world 4428
上一篇: Spring基于注解的申明式事物
下一篇: mysql读写分离和解决主从同步延时问题
kris999
博客等级 码龄11年 39粉丝 93原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值