剑指offer学习2(Java语言版)

《剑指offer》Java版 一、引言 《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。 二、目录 1赋值运算函数 2单例设计模式 3二维数组中查找目标值 4替换字符串中的空格 5从尾到头打印链表 6由前序和中序遍历重建二叉树 7用两... 阅读详情

面试题2:单例模式

设计一个类,我们只能生成该类的一个实例

这道题考察的是单例模式,这里给个对单例模式讲解的比较详细的网址 菜鸟教程|单例模式

面试题3:数组中重复的数字

在这里插入图片描述
分析:利用数组下标是连续的,且在该题中与数组存储的元素具有对应关系,如果没有重复,则排序后刚好和下标对应;如果有重复,则排序后存在不能和下标对应的情况

public class Demo03_1 {
	/**
	 * @param arr 输入的数组
	 * @return 返回 -1表示要么数字超范围,要么没有重复的数字
	 */
	public static int search(int[] arr) {
		if (arr == null) {
			return -1;
		}
		for (int i = 0; i < arr.length; i++) {
			while (arr[i] != i) {
				int index = arr[i];
				// 验证数字
				if (index < 0 || index > arr.length - 1) {
					System.out.print("数组元素超出 [0,n-1]范围 ");
					return -1;
				}
				// 查重
				if (arr[i] == arr[index]) {
					return arr[i];
				}
				// 交换
				int temp = arr[index];
				arr[index] = arr[i];
				arr[i] = temp;
			}
		}
		return -1;
	}

	public static void main(String[] args) {
		// 测试用例
		int[] arr0 = null; // 空指针 
		int[] arr1 = {}; // 测空数组
		int[] arr2 = { 2, 3, 1, 0, 2, 5, 3 }; // 有重复数字:数字在 0 ~ n-1
		int[] arr3 = { 2, 3, 7, 0, 3, 5, 3 }; // 数字超出范围:数字不在 0 ~ n-1
		int[] arr4 = { 2, 0, 1, 3, 5, 4 }; // 没有重复数字

		// 测试结果
		System.out.println("arr0: " + search(arr0));
		System.out.println("arr1: " + search(arr1));
		System.out.println("arr2: " + search(arr2));
		System.out.println("arr3: " + search(arr3));
		System.out.println("arr4: " + search(arr4));
	}
}

测试输出:

arr0: -1
arr1: -1
arr2: 2
数组元素超出 [0,n-1]范围 arr3: -1
arr4: -1

在这里插入图片描述
分析:这里只是在题目一的基础上加1,使下标对应比所存的数字小一,所以可以在题目一的解答上稍作修改。

public class Demo03_2 {
	/**
	 * @param arr 输入的数组
	 * @return 返回 -1表示要么数字超范围,要么没有重复的数字
	 */
	public static int search(int[] arr) {
		if (arr == null) {
			return -1;
		}
		for (int i = 0; i < arr.length; i++) {
			while (arr[i] != i + 1) {
				int index = arr[i] - 1;
				// 验证数字
				if (index < 0 || index > arr.length - 1) {
					System.out.print("数组元素超出 [1,n]范围 ");
					return -1;
				}
				// 查重
				if (arr[i] == arr[index]) {
					return arr[i];
				}
				// 交换
				int temp = arr[index];
				arr[index] = arr[i];
				arr[i] = temp;
			}
		}
		return -1;
	}

	public static void main(String[] args) {
		// 测试用例
		int[] arr0 = null; // 空指针 
		int[] arr1 = {}; // 测空数组
		int[] arr2 = { 2, 3, 5, 4, 3, 2, 6, 7 }; // 有重复数字:数字在 1 ~ n
		int[] arr3 = { 2, 9, 5, 4, 3, 2, 6, 7 }; // 数字超出范围:数字不在 1 ~ n
		int[] arr4 = { 2, -1, 5, 4, 3, 2, 6, 7 }; // 数字超出范围:数字不在 1 ~ n
		int[] arr5 = { 2, 1, 3, 8, 4, 6, 5, 7 }; // 没有重复数字

		// 测试
		System.out.println("arr0: " + search(arr0));
		System.out.println("arr1: " + search(arr1));
		System.out.println("arr2: " + search(arr2));
		System.out.println("arr3: " + search(arr3));
		System.out.println("arr4: " + search(arr4));
		System.out.println("arr5: " + search(arr5));
	}
}

测试输出:

arr0: -1
arr1: -1
arr2: 3
数组元素超出 [1,n]范围 arr3: -1
数组元素超出 [1,n]范围 arr4: -1
arr5: -1

面试题4:二维数组中的查找

在这里插入图片描述
分析:首先处理输入为空数组的情况,还应该考虑是否存在行向量和列向量的情况。观察可以发现题目描述的矩阵可发现:目标值target与某一值arr[i][j]比较的时候,如果target = arr[i][j]直接返回true;如果target < arr[i][j],则应该在该值左或上方找,i++;如果target > arr[i][j],则应该在该值的右或下方找。所以我们应该开始从最左下角找,这样就只需要向上和向右走了,直到找到这个值返回true或者搜索完这个矩阵没找到返回false。

public class Demo04 {
	public static void main(String[] args) {
		// 测试用例
		int[][] m0 = null; // 空指针
		int[][] m1 = {}; // 空数组
		int[][] m2 = { { 1 }, { 3 }, { 6 }, { 23 }, { 49 }, { 60 } }; // 列向量
		int[][] m3 = { { 1, 3, 6, 23, 49, 60 } }; // 行向量
		int[][] m4 = { // 正常
						{ 1, 2, 8, 9 }, 
						{ 2, 4, 9, 12 }, 
						{ 4, 7, 10, 13 }, 
						{ 6, 8, 11, 15 } 
					 };
		// 二维数组不符合递增情况,不考虑
		// 二维数组行向量不等长,不考虑

		int[] target = { 3, -2, 6, 4, 9 };

		// 测试
		System.out.println("m0, target = 3: " + search(m0, target[0])); // false
		System.out.println("m1, target = -2: " + search(m1, target[1]));// false
		System.out.println("m2, target = 6: " + search(m2, target[2])); // true
		System.out.println("m3, target = 4: " + search(m3, target[3])); // false
		System.out.println("m4, target = 9: " + search(m4, target[4])); // true
	}

	public static boolean search(int[][] m, int target) {
		// 判空
		if (m == null || m.length == 0) {
			return false;
		}
		int row = m.length;
		int col = m[0].length;
		int i = row - 1, j = 0;
		while (i >= 0 && j <= col -1) {
			if (m[i][j] > target) {
				i--;
			} else if (m[i][j] < target) {
				j++;
			} else {
				return true;
			}
		}
		return false;
	}

}

测试输出:

m0, target = 3: false
m1, target = -2: false
m2, target = 6: true
m3, target = 4: false
m4, target = 9: true

面试题5:替换空格

在这里插入图片描述

分析:这个题不太适合Java,因为可以用替换函数s.replace(" ", “%20”);直接返回,暂时跳过。

面试题6:从尾到头打印链表

在这里插入图片描述
分析:LeetCode上算法题,头结点都是带数据的,所以这里我们也默认头结点带数据。
首先,需要考虑到链表为null和长度为1的特殊情况,打印一般是要求返回一个存储结点值的List。

  • 方法1:遍历一遍存储在栈中,然后依次弹出来,有循环和递归两种;
  • 方法2:将值存储到一个ArrayList反向遍历;

用递归方法代码简洁,但是当列表很长,调用方法栈帧很多层,很吃内存,所以还是用循环的方式要好一点。

public class Demo06 {
	public static void main(String[] args) {
		// 测试用例
		// 一个测试用例 list = [9,8,7,6,5,4,3,2,1]
		ListNode root = new ListNode(9);
		ListNode node = root;
		for (int i = 8; i > 0; i--) {
			node.next = new ListNode(i);
			node = node.next;
		}

		// 测试
		printLinkedList(null); // null
		printLinkedList(root); // [9,8,7,6,5,4,3,2,1]
	}

	// 用了额外的空间,空间复杂度为O(n)
	private static void printLinkedList(ListNode root) {
		// 底层是数组, 所以随机访问get(i)复杂度是O(1)
		ArrayList<Integer> list = new ArrayList<Integer>(); 
		if (root == null) {
			return;
		}
		// 遍历
		while (root != null) {
			list.add(root.val);
			root = root.next;
		}
		// 反向打印
		for (int i = list.size() - 1; i >= 0; i--) {
			System.out.print(list.get(i) + " ");
		}
		list.clear();
	}
}

class ListNode {
	int val;
	ListNode next;

	ListNode(int x) {
		val = x;
	}
}

测试输出:

1 2 3 4 5 6 7 8 9 

面试题7:重建二叉树

在这里插入图片描述
分析:二叉树是有序树,前序遍历的第一个值即为根节点,根据根节点的值我们可以在中序遍历中找到根节点的位置j,j前面部分位于根节点左边,后面的部分位于根节点右边,这样我们就又可以在先序遍历序列中找到根节点的左右子节点,依次递归下去。
同时我们还要注意给出的序列中不能有重复的值,不然是不能找到根节点的。

// 定义二叉树节点
class TreeNode {
	int val;
	TreeNode left;
	TreeNode right;

	TreeNode(int x) {
		val = x;
	}
}

public class Demo07 {
	public static void main(String[] args) {
		// 测试序列
		int[] preOrder = { 1, 2, 4, 7, 3, 5, 6, 8 };
		int[] inOrder = { 4, 7, 2, 1, 5, 3, 8, 6 };
		// 重建
		TreeNode root = reConstructBinaryTree(preOrder, inOrder);
		// 测试先序遍历
		traversePre(root);
		// 测试中序遍历
		System.out.println("\n---------------");
		traverseIn(root);
	}

	public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root = reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
        return root;
    }

	// 根据先序遍历和中序遍历创建二叉树
	private static TreeNode reConstructBinaryTree(int[] pre, int startPre,int endPre,int[] in, int startIn,int endIn){
		// 递归结束条件
        if(startPre>endPre||startIn>endIn)
            return null;
        // 新建一个节点
        TreeNode root = new TreeNode(pre[startPre]);
        
        for(int i = startIn; i <= endIn; i++)
            if(in[i] == pre[startPre]){// 在中序遍历中找到根节点位置
            	/**
            	 * 中序遍历中根节点在i位置,先序遍历中根节点在startPre位置,则:
            	 * 先序序列左子树范围:[startPre+1,startPre+i-startIn]
            	 * 中序序列左子树范围:[startIn,i-1]
            	 * 先序序列右子树范围:[i-startIn+startPre+1,endPre]
            	 * 中序序列右子树范围:[i+1,endIn]
            	 */
                root.left = reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
                root.right = reConstructBinaryTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);
                break;
            }
        return root;
    }
	
	// 中序遍历
	public static void traverseIn(TreeNode root) {
		if (root != null) {
			traverseIn(root.left);
			System.out.print(root.val + " ");
			traverseIn(root.right); 
		}
	}

	// 先序遍历
	public static void traversePre(TreeNode root) {
		if (root != null) {
			System.out.print(root.val + " ");
			traversePre(root.left);
			traversePre(root.right); 
		}
	}

}

面试题8:二叉树的下一个结点

在这里插入图片描述

面试题9:用两个栈实现队列

在这里插入图片描述
分析:可以用stack1作为数据存储,添加的时候先已有的数据全压入stack2,然后在stack1添加新的元素,最后把stack2的元素压回来;如果是删除,直接从stack1栈顶pop一个元素即可,代价很小。这种方法缺点是入栈需要执行2n出栈操作和2n+1次入栈操作。

public class Quene<T> {
	private Stack<T> stack1 = new Stack<T>();
	private Stack<T> stack2 = new Stack<T>();

	public void appendTail(T t) {
		while (!stack1.isEmpty()) {
			stack2.push(stack1.pop());
		}
		stack1.push(t);
		while (!stack2.isEmpty()) {
			stack1.push(stack2.pop());
		}
	}

	public T deleteHead() {
		if (!stack1.isEmpty()) {
			return stack1.pop();
		}
		return null;
	}
}
public class Demo09 {
	public static void main(String[] args) {
		Quene<Integer> quene = new Quene<Integer>();
		// 入队测试
		for (int i = 0; i < 10; i++) {
			quene.appendTail(i);
		}
		// 出队测试
		Integer temp = null;
		while ((temp = quene.deleteHead()) != null) {
			System.out.print(temp + ", ");
		}
		// 空队出队
		System.out.println();
		System.out.println(quene.deleteHead());
	}
}

测试输出:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
null

思考题:用两个队列实现一个栈?
分析:其实用一个队列就可以实现一个栈,入栈的时候直接入队列,出栈的时候现将队列前面n-1个依次出队列入队列,然后将第n个出队列取出,第n个取出不在入队。

面试题10:斐波那契数列

在这里插入图片描述
分析:该题既可以用循环实现,也可以用递归实现。递归占用的内存相对较大,所以我们还是考虑用循环实现。

public class Demo10 {
	// 0 1 1 2 3 5 8 13
	public static void main(String[] args) throws Exception {
		// 测试
		for (int n = 0; n < 10; n++) {
			System.out.println("fibonacci(" + n + ") = " + fibonacci(n));
		}
		System.out.println("fibonacci(-1) = " + fibonacci(-1)); // 该行会抛出异常
	}

	private static int fibonacci(int n) throws Exception {
		int[] f = { 0, 1 };
		int fn = f[0] + f[1];
		if (n >= 2) {
			while (n-- > 1) {
				fn = f[0] + f[1];
				f[0] = f[1];
				f[1] = fn;
			}
		} else if (n >= 0) {
			return f[n];
		} else {
			throw new Exception("n < 1,输入不和法!!");
		}

		return fn;
	}
}

测试输出:

fibonacci(0) = 0
fibonacci(1) = 1
fibonacci(2) = 1
fibonacci(3) = 2
fibonacci(4) = 3
fibonacci(5) = 5
fibonacci(6) = 8
fibonacci(7) = 13
fibonacci(8) = 21
fibonacci(9) = 34
Exception in thread "main" java.lang.Exception: n < 1,输入不和法!!
	at offer.ex10.Demo10.fibonacci(Demo10.java:34)
	at offer.ex10.Demo10.main(Demo10.java:16)

在这里插入图片描述
分析:
当n=1时,有一种跳法;
当n=2时,有两种跳法;
当n>2时,记所有跳法为f(n),先跳1次,则可以跳1级或2级,所以有f(n) = f(n-1) + f(n-2);
该问题可以转化成题目一中的斐波拉契数列,代码略。

剑指offer-(java版-2).pdf 剑指offer-(java版-2), 低分共享出来, 文字还比较清晰 立即下载

相关推荐

剑指offer第二版完整java版

本人吐血亲自整理,完整版!在牛客网上完全可以运行通过,对于牛客上没有的,也有完整的整理。

剑指Offer(第二版)Java例题详解

PS:《剑指offer》是很多同学找工作都会参考的一本面试指南,同时也是一本算法指南。现在很多互联网的算法面试题基本上可以在这里找到影子,为了以后方便参考与回顾,现将书中例题用Java实现(第二版),欢迎各位同学一起交流进步。 GitHub: 待整理添加。 剑指offer(第二版)Java例题详解例题顺序 例题顺序 下面是所有例题在《剑指offer》书中的页码、题目、以及题解链接。(目前已经刷过全部例题,现在需要时间整理,然后慢慢更新内容) 页码 题目顺序 题目 链接 25 1 赋值运算符函

qq_41866626的博客 2535

剑指offer第二版整理的java代码

个人收集整理的剑指offer第二版java代码,每道题都命名了,有多种解法

《剑指offer第二版》JAVA代码

/** * 字符串匹配问题 */ public class Offer19 { public boolean solve(String s, String pattern) { if (s == null || pattern == null) return false; char[] sArr = s.toCharArray(); c...

业精于勤荒于嬉 行成于思毁于随 1277

Nvidia Jetson CH340 驱动安装

最近调一个USB设备,Windows系统上是可以安装CH340 驱动使用的,移到Jetson AGX Orin 上发现没有 /dev/ttyUSB* 设备显示。是一个为盲人和视力障碍者提供的终端设备驱动程序,它会在系统启动时自动加载并占用串口设备,导致我们无法正常使用部分串口设备。安装完后,内核中已经有。

Vulcan_S的博客 1639

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3182

剑指offerⅡ(Java 持续更新...)

剑指offer

weixin_45876739的博客 809

PCB布局规范及其注意事项(纯干货)

这样做的好处是信号1,3层不会有串扰,4和5作为电源有紧密的耦合,3个信号层都有GND平面可以参考,且不会互相产生串扰,唯一的缺点是布线的层面只有3个信号层(信号03的是最适合来传输高速信号,因为该层的二面都有屏蔽,防止干扰传出,也防止干扰传入)33、影响阻抗匹配的参数(ER介电常数(1GHZ以下默认为4.2,以上的话问板厂),H介质厚度(就是内层压合的PP片厚度),W走线的线宽,T走线的厚度(铜厚/减小线的厚度可以增大阻抗))我这里使用的是CITS25来计算阻抗。

qq_42379138的博客 8846

剑指offer_2_二进制加法(java)

计算二进制加,1+0=1 0+0=0 1+1=10,题目没有限制字符串长度,不能使用字符串转换为整数计算,会溢出;

一起coding,一起嗨。 1717

设备树实践:从零构建一个嵌入式板级的设备树描述

本文详细介绍了如何从零开始为嵌入式Linux系统构建设备树(Device Tree),以i.MX6ULL处理器为例,涵盖硬件分析、设备树语法、外设配置及调试技巧。通过实践指导,帮助开发者掌握设备树编写,实现硬件与软件的高效对接,提升嵌入式开发效率。

plum99的博客 307

2025.06.25【微生物】|Emu工具安装与使用详解:全长16S扩增子微生物丰度分析

Emu是一款基于贝叶斯方法的微生物多样性分析工具,专为处理高错误率的长读长16S/18S扩增子数据优化。本文详细介绍了Emu的安装与使用方法:1)通过conda创建独立环境并安装Emu;2)提供SILVA等预构建数据库的下载指南,并说明自定义数据库的构建方法;3)演示单样本和多样本分析流程,解读关键输出文件;4)介绍丰度表合并、分类等级汇总等实用功能扩展;5)建议后续分析方向。文章还附有官方GitHub链接和相关文献资源,为微生物群落结构研究提供了一套完整的分析解决方案。

1256

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

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

尾尾部落 6万+

探索CompletableFuture:高效异步编程的利器

随着现代软件系统的复杂性和用户需求的多样化,异步编程成为了提升系统性能和响应速度的重要手段。在Java领域,CompletableFuture作为Java 8引入的新特性,提供了强大的异步编程能力,极大地简化了多线程和并发任务的处理。本文将深入探讨CompletableFuture的基本功能和使用方法,介绍如何利用其提升程序的并发性能和代码的可维护性。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 170万+

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

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

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

【Neo4j × Python】基于知识图谱的电影问答系统(含问题记录与解决)附:源代码(含Bug解决)

此前,曾介绍过Neo4j的一些基础知识,本篇将在PyCharm中与Neo4j建立关联,从0到1实现一个基于知识图谱的电影问答系统,实现过程中,没有一帆风顺,而是遇到了一些问题,因此也包含问题的记录与解决。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 3167

OSG程序如何适配在无显卡的Ubuntu系统中

osg踩坑,希望遇到同样问题的人,可以尽快出坑,完美开发

大侠的后花园 459

【刷题】2021最新剑指Offer汇总

新手村 关卡1-1 洛谷的第一个任务 超级玛丽游戏(洛谷-P1000):点击这里 A+B Problem(洛谷-P1001):点击这里

瑞新の博客:bennyrhys 6299

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

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

【剑指offer】Java版代码(完整版)

一、引言 《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。 二、目录 赋值运算函数 单例设计模式 二维数组中查找目标值 替换字符串中的空格 从尾到头打印链表 由前序和中序遍历重建二叉树 用两个

白夜行 7万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

剑指offer--Java实现

剑指offer合辑之面试01-67 《剑指offer》面试题 Java 代码的 Github 地址 《剑指offer》面试题 Markdown 版本,包含题目、分析及代码的 Github 地址 面试题2 实现单例模式 面试题3 二维数组中的查找 面试题4 替换空格 面试题5 从尾到头打印链表 面试题6 重建二叉树 面试题7 用两个栈实现队列 面试题8 旋转数组的最小数字 面试题9 斐波那契数列...

LYZ 4109

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

秦怀杂货店 6976

《剑指Offer》Java版目录(源码下载)

《剑指Offer》PDF版下载:点我书中全部50道题目的Java实现如下,java源码下载:点我剑指Offer面试题1面试题2单例模式 剑指Offer面试题3二维数组查找 剑指Offer面试题4替换空格 剑指Offer面试题5反向打印链表 剑指Offer面试题6重建二叉树(根据前序中序输出后序) 剑指Offer面试题7用两个栈实现队列(附带用两个队列实现栈) 剑指Offer面试题8旋转数

login_sonata的博客 4387

java 版剑指offer算法集锦

比如,第一天,你刷这道算法题的时候看不懂,先不用着急,很多人都是这样过来的,先搜一下答案,看一下别人是怎么解决的。第三,掌握一种算法,不仅要知道 what,还要知道 why(分析各种算法的优缺点),比如 topK问题,有常见的几种解决方案,排序,快排思想,海量数据堆排序。第二天,自己再写一遍,加深印象。第一,要了解基本的数据结果,数组,聊表,Map,Set,二叉树等,了解他们的优缺点,时间复杂度,空间复杂度等。现如今,如果你想进入大厂,腾讯,阿里,头条,拼多多等,不管是社招还是校招,肯定都会面试到算法的。

2401_89734031的博客 1911

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

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

程序员世杰 2298

java 版剑指offer算法集锦,java面试编程题及答案

由于篇幅限制,小编在此截出几张知识讲解的图解[外链图片转存中…(img-sIf8ITFW-1711909849838)][外链图片转存中…(img-LLssK4ha-1711909849838)][外链图片转存中…(img-ruSl3rB5-1711909849839)][外链图片转存中…(img-Aa2EoBWz-1711909849839)]

2401_84003839的博客 953

剑指offer

本习题集用于记录一些剑指offer的习题,用于记录和复盘思路,会持续更新

保持学习 1256

【Java】剑指offer-leetcode题解

【Java】剑指offer-leetcode题解 文章目录【Java】剑指offer-leetcode题解数组中重复的数字剑指offer思路哈希二维数组中的查找替换空格从尾到头打印链表递归辅助栈重建二叉树用两个栈实现队列斐波那契数列青蛙跳台阶问题旋转数组的最小数字矩阵中的路径机器人的运动范围剪绳子剪绳子 II二进制中1的个数数值的整数次方打印从1到最大的n位数删除链表的节点正则表达式匹配表示数值的字符串调整数组顺序使奇数位于偶数前面链表中倒数第k个节点反转链表合并两个排序的链表树的子结构二叉树的镜像对称的二

小七自学博客 1717
上一篇: 剑指offer学习1(Java语言版)
下一篇: 剑指offer学习3(Java语言版)
sixabs
博客等级 码龄8年 17粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值