Java与算法(12)

12道经典Java算法题(附带参考代码) 即使做web开发,也会遇到各种各种需要解决的算法问题,本文节选部分经典练手算法,并提供相关参考答案,希望对你有所帮助 另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,我认为对面试来说是非常有用的,想要资料的话请点795983544 暗号。 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class t. 阅读详情

Java与算法(12)

1.二叉树节点间最大距离问题
给定头节点,求最大距离
public class MaxDIstance {
	public static class Node {
		public int value;
		public Node left;
		public Node right;

		public Node(int data) {
			this.value = data;
		}
	}

	public static int maxDistance(Node head) {
		int[] record = new int[1];
		return posOrder(head, record);
	}

	public static int posOrder(Node head, int[] record) {
		if (head == null) {
			record[0] = 0;
			return 0;
		}
		int lMax = posOrder(head.left, record);
		int maxfromLeft = record[0];
		int rMax = posOrder(head.right, record);
		int maxFromRight = record[0];
		int curNodeMax = maxfromLeft + maxFromRight + 1;
		record[0] = Math.max(maxfromLeft, maxFromRight) + 1;
		return Math.max(Math.max(lMax, rMax), curNodeMax);
	}

	public static void main(String[] args) {
		Node head1 = new Node(1);
		head1.left = new Node(2);
		head1.right = new Node(3);
		head1.left.left = new Node(4);
		head1.left.right = new Node(5);
		head1.right.left = new Node(6);
		head1.right.right = new Node(7);
		head1.left.left.left = new Node(8);
		head1.right.left.right = new Node(9);
		System.out.println(maxDistance(head1));
	}

}
2.找出两个节点的最近公共祖先
public class LowAncestor {

	public static class Node {
		public int value;
		public Node left;
		public Node right;

		public Node(int data) {
			this.value = data;
		}
	}
	
	public static Node lowestAncestor(Node head, Node o1, Node o2) {
		if (head == null || head == o1 || head == o2) {
			return head;
		}
		Node left = lowestAncestor(head.left, o1, o2);
		Node right = lowestAncestor(head.right, o1, o2);
		if (left != null && right != null) {
			return head;
		}
		return left != null ? left : right;
	}

	public static void main(String[] args) {
		Node head = new Node(1);
		head.left = new Node(2);
		head.right = new Node(3);
		head.left.left = new Node(4);
		head.left.right = new Node(5);
		head.right.left = new Node(6);
		head.right.right = new Node(7);
		head.right.right.left = new Node(8);
		Node o1 = head.left.right;
		Node o2 = head.right.left;

		
		System.out.println("o1 : " + o1.value);
		System.out.println("o2 : " + o2.value);
		System.out.println("ancestor : " + lowestAncestor(head, o1, o2).value);
		

		
		
	}

}
3.在二叉树找到一个节点的后继节点
public class GetNextNode {
	public static class Node {
		public int value;
		public Node left;
		public Node right;
		public Node parent;

		public Node(int data) {
			this.value = data;
		}
	}
	public static Node getNextNode(Node node) {
		if (node == null) {
			return node;
		}
		if (node.right != null) {
			return getLeftMost(node.right);
		} else {
			Node parent = node.parent;
			while (parent != null && parent.left != node) {
				node = parent;
				parent = node.parent;
			}
			return parent;
		}
	}

	public static Node getLeftMost(Node node) {
		if (node == null) {
			return node;
		}
		while (node.left != null) {
			node = node.left;
		}
		return node;
	}
	
	
	
	public static void main(String[] args) {
		Node head = new Node(6);
		head.parent = null;
		head.left = new Node(3);
		head.left.parent = head;
		head.left.left = new Node(1);
		head.left.left.parent = head.left;
		head.left.left.right = new Node(2);
		head.left.left.right.parent = head.left.left;
		head.left.right = new Node(4);
		head.left.right.parent = head.left;
		head.left.right.right = new Node(5);
		head.left.right.right.parent = head.left.right;
		head.right = new Node(9);
		head.right.parent = head;
		head.right.left = new Node(8);
		head.right.left.parent = head.right;
		head.right.left.left = new Node(7);
		head.right.left.left.parent = head.right.left;
		head.right.right = new Node(10);
		head.right.right.parent = head.right;
		Node test = head.left.right.right;
		Node node = getNextNode(test);
		System.out.println(node.value);
		
		
	}

}
想学习算法?Java笔试手写算法面试12题『含答案』整的明明白白 本文转载自:想学习算法?Java笔试手写算法面试12题『含答案』整的明明白白 前言: 我坚信,机会永远属于有准备的人,我们与其羡慕他人的成功,不如从此刻起,积累足够多的的知识和面试经验,为将来进入更好的工作做好充分的准备! 算法面试题+答案 1. 统计一篇英文文章单词个数。 public class WordCounting { public static void main(String[... 阅读详情

相关推荐

【java】springboot分库分表 12 种分片算法

算法的数据分布规则,那么这个算法也很容易明白,分片健值在界值范围内 [datetime-lower,datetime-upper) 遵循每满足 sharding-seconds 时间段的数据放入对应分片表,超出界值的数据上下顺延到其他分片中。在分片策略中,分片键确定了数据的拆分依据,分片算法则决定了如何对分片键值运算,将数据路由到哪个物理分片中。基于分片边界的范围分片算法,和分片容量算法不同,这个算法根据数据的取值范围进行分片,特别适合按数值范围频繁查询的场景。为 31536000 秒(一年)。

qq_27246521的博客 80

告诉你今年是哪个生肖年的java程序

package com.swift; import java.util.Scanner; public class ChineseYear { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Enter

Advancing Swift 的博客 612

从Datasheet到可用的Verilog模块:手把手教你为N25Q128 SPI Flash写状态机驱动

本文详细介绍了如何从Datasheet到实现可用的Verilog模块,手把手教你为N25Q128 SPI Flash编写状态机驱动。文章涵盖SPI Flash的核心工作机制、数据手册解析方法、Verilog状态机设计实践以及调试与性能优化技巧,特别适合FPGA开发者和硬件设计工程师参考。

weixin_30596023的博客 175

java计算本月之前的12个月

public static void main(String[] args) { String[] months = new String[12]; Calendar cal = Calendar.getInstance(); cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)); for(int i=0;i<12;i++){ ...

亮亮同學的博客 1307

EtherCAT-7 从站代码移植-SPI

STM32F103 + AX58100,从站代码移植。

tianya_xuan的博客 3565

8155平台multi-display(多屏显示)原理与配置

8155平台多屏互动原理与配置

漂流瓶の海岸 1603

JAVA12. (循环)**输入一个整数,计算它各位上数字的和。

public static void main(String[] args) { /* * 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数) 各位数字使用%取之相加,取十位/,再次进入循环, */ int n = 56778; int sum = 0; while (n != 0) { sum += n % 10;// 取各位 n = n / 10;...

L_CC9的博客 1215

SIMPLIS仿真软件2.2-SIMPLIS快速入门2

SIMPLIS仿真软件2.2-SIMPLIS快速入门2导读 导读 本文承接上一篇文章。开始介绍SIMPLIS仿真部分。正如上一篇所讲的快速入门的定位,该文对SIMPLIS的三种分析模式不会很深入的讲解,只会记录下一些重要的设置和操作。对于SIMPLIS的三种分析模式的详细讲解,后面会专门撰写。如果读者还没有搭建上一篇文章中讲述的电路,那你可以点击这个链接免费下载所需的电路SIMPLIS_tutorial_buck_converter ,然后在这个电路的基础上继续进行以下操作。 ...

qq_44677482的博客 2万+

java实现12种排序算法

Java实现的12种排序 2019-01-05 一.冒泡排序及其实现 二.希尔排序及其实现 三.插入排序及其实现 四.插入排序及其实现 五.快速排序及其实现 六.合并排序及其实现 七.计数排序及其实现 八.基数排序及其实现 九. 桶排序及其实现 十. 堆排序及其实现 十一.二叉树排序及有序集合 十二.利用集合的4种排序...

weixin_34392843的博客 320

WPS集成DeepSeek最新教程,附详细图文,让文案生成更智能

本文将为大家详细介绍如何将 DeepSeek 功能集成到 WPS 中,通过 OfficeAI 插件,你无需进行复杂的本地部署,只需通过官网连接即可快速启用 DeepSeek 强大的 AI 功能。不论是文案生成、翻译校对,还是深度推理、决策支持,DeepSeek 都能为你提供便捷的解决方案。让我们一起来看看如何操作吧!

Java徐师兄的博客 6万+

SAP(ERP)工艺路线(Routing)业务视角解析

工艺路线(Routing)也是PP模块,即生产制造模块中最重要核心主数据之一,也是ERP(SAP)顾问,必需从业务与系统深入掌握的重要主数据,它也是整个生产计划与生产流程的重要基础。因为执行步骤只是操作层面的认知,业务顾问需要从业务本质上去理解它,要真正从业务视角理解工艺路线的业务价值,而不仅仅是操作层面的认知。因此将工艺路线理解为“有以上业务本质的理解,然后进到SAP系统中,就容易理解工艺路线(Routing)的每一组成部分结构与功能了,本质就是理解制造企业如何将设计意图转化为物理现实的编码规则。

m0_45197968的博客 1498

12道Java算法与编程面试题

自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步! 12道Java算法与编程面试题 算法与编程 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 答: package cn.itcast; import java.io.File; import j...

Tyloo_wdnmd的博客 191

第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

🥏第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3867

12道java经典入门算法题!

12道java经典入门算法题! 【程序1】   题目:将一个数组逆序输出。   程序分析:用第一个与最后一个交换。   其实,用循环控制变量更简单: for(int k=11;k>=1;k–) System.out.print(myarr[k]+","); 【程序2】   题目:取一个整数a从右端开始的4~7位。   程序分析:可以这样考虑:...

Tyloo_wdnmd的博客 914

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章:ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-优快云博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-优快云博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清教授的论文和书籍,这里就不赘述了,下面给出梯形图+SCL代码。

RXXW_Dor的博客 2282

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java 排序函数的特点_java实现12种排序算法

Java实现的12种排序2019-01-05一.冒泡排序及其实现二.希尔排序及其实现三.插入排序及其实现四.插入排序及其实现五.快速排序及其实现六.合并排序及其实现七.计数排序及其实现八.基数排序及其实现九. 桶排序及其实现十. 堆排序及其实现十一.二叉树排序及有序集合十二.利用集合的4种排序排序方式一.冒泡排序及其实现一.home→包BubbleSort→类main→主函数bubble...

weixin_33140809的博客 294

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

12球问题的java算法

<br />问题:12个球中有一个重量异常的球。请你用无砝码天平称三次,找出这个球来,并说出它比普通球轻或重。<br /><br />    // 一組測試數據,將12個球做好標記<br />    double a = 1.0, b = 1.0, c = 1.0, d = 1.0, e = 0.9, f = 1.0, g = 1.0, h = 1.0, i = 1.0, j = 1.0, k = 1.0, l = 1.0;<br />    // 顯示結果<br />    String result =

yuanbieli的专栏 742

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Java 算法】排序算法评测模板 (12 种排序算法对比)

快速排序、归并排序、希尔排序、基数排序、计数排序、(递归版本 & 非递归版本的实现测试)

学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗,学习只为当小狗狗 262

java算法day12

最后一个元素要加入结果集怎么写?

TOMOT77的博客 427

Java算法OJ(12)

哈喽大家好吖,今天来分享几道的练习题,欢迎大家在评论区多多交流,废话不多说让我们直接开始吧。

2301_81073317的博客 1144

Java数据结构与算法12

选择排序的主要优点与数据移动有关。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。虽然选择排序与冒泡排序在时间复杂度属于同一量级,但是毫无疑问选择排序的效率更高,因为它的交换操作次数更少,而且在交换操作比比较操作的时间级大得多时,选择排序的速度是相当快的。传统的选择排序每次只确定最小值,根据改进冒泡算法的经验,我们可以对排序算法进行如下改进:每趟排序确定两个最值——最大值与最小值,这样就可以将排序趟数缩减一半。

dulalalanunu的博客 131

【Spring Web教程】Java常见12种限流方式和算法总结

在用户并发量比较大的情况下,服务会发生雪崩效应:用户同时请求堆积在一个接口,导致其它的接口服务无法访问,这种效果给到用户体验不好。本章分别描述常见的限流算法。单机版本限流:计数器限流:AtomicInteger、Semaphore信号量、Semaphore控制并发量;滑动窗口限流算法;Guava令牌桶限流;漏桶限流;微服务限流方式:Alibaba Sentinel限流(底层采用滑动窗口算法);SpringCloud Hystrix限流(底层采用滑动窗口算法);网关统一设置限流;分布式限流:Redis + L

terrybg 1万+

12、Java数据结构与算法——数据结构与算法概念

Java数据结构与算法分为和两部分,首先我们先了解一下数据结构的相关概念。学习此内容之前需要完成Java基础篇的学习。

miye0的博客 153

12.5_黑马数据结构与算法Java

涉及到的知识点:反码补码原码,二进制转十进制,无符号右移,system.arraycopy.

2301_80185446的博客 1639

Java笔记_12(常见算法)

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。∶将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。第一轮: 把0索引的数字作为基准数,确定基准数在数组中正确的位置。比基准数小的全部在左边,比基准数大的全部在右边。函数式编程思想,忽略面向对象的复杂语法,

weixin_74155781的博客 588

12.12_黑马数据结构与算法笔记Java

写了好久.p是红色那个箭头,它通过什么进行移动的呢? 怎么知道下一步应该移动到哪里呢?就是通过p.next知道的。next就是紫色箭头。 我通过这个紫色的箭头,从而得知p下一步应该移动到哪里。好的,看看我们的题目。同理,我这个t就是刚刚上面那个p的效果,这个t可以通过哨兵节点知道第一个要指向的是什么。因此得出结论:打印数组,是因为输出语句那里调用了toString方法,以及重写了toString方法。遍历得到是头指针,是因为foreach中,会调用其迭代器的next()方法来获取元素。

2301_80185446的博客 2436
上一篇: Java与算法(11)
下一篇: Java与算法(13)
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值