Java与算法(3)

Python3实现Java字符串哈希值算法 Python3 实现Java语言的字符串哈希值计算方法 阅读详情

Java与算法(3)

题目:

定义二叉树节点如下: public class Node { public int value; public Node left; public Node right;

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

一个数组的MaxTree定义如下

1 数组没有重复元素 2 MaxTree是一棵二叉树,数组的每一个值对应一个二叉树节点

3包括MaxTree树在内且其中的每一棵子树上,值 最大的节点都是树的头

给定一个没有重复元素的数组arr,写出生成这个数组的MaxTree函数,要求如果数组长度为N,则时间复杂度为O(N),额外空间复杂度为O(N)

public class MaxTree {
	
	/*
	 * 节点类
	 */
	public static class Node {
		public int value;
		public Node left;
		public Node right;

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

	public static Node getMaxTree(int[] arr) {
		Node[] nArr = new Node[arr.length];
		for (int i = 0; i != arr.length; i++) {
			nArr[i] = new Node(arr[i]);
		}
		Stack<Node> stack = new Stack<Node>();
		HashMap<Node, Node> lBigMap = new HashMap<Node, Node>();//存放节点对应的左边第一个比它大的节点
		HashMap<Node, Node> rBigMap = new HashMap<Node, Node>();//存放节点对应的右边第一个比它大的节点
		for (int i = 0; i != nArr.length; i++) {
			Node curNode = nArr[i];
			while ((!stack.isEmpty()) && stack.peek().value < curNode.value) {
				popStackSetMap(stack, lBigMap);
			}
			stack.push(curNode);
		}
		while (!stack.isEmpty()) {
			popStackSetMap(stack, lBigMap);
		}
	
		for (int i = nArr.length - 1; i != -1; i--) {
			Node curNode = nArr[i];
			while ((!stack.isEmpty()) && stack.peek().value < curNode.value) {
				popStackSetMap(stack, rBigMap);
			}
			stack.push(curNode);
		}
		while (!stack.isEmpty()) {
			popStackSetMap(stack, rBigMap);
		}
		Node head = null;
		for (int i = 0; i != nArr.length; i++) {
			Node curNode = nArr[i];
			Node left = lBigMap.get(curNode);
			Node right = rBigMap.get(curNode);
			if (left == null && right == null) {
				head = curNode;
			} else if (left == null) {
				if (right.left == null) {
					right.left = curNode;
				} else {
					right.right = curNode;
				}
			} else if (right == null) {
				if (left.left == null) {
					left.left = curNode;
				} else {
					left.right = curNode;
				}
			} else {
				Node parent = left.value < right.value ? left : right;
				if (parent.left == null) {
					parent.left = curNode;
				} else {
					parent.right = curNode;
				}
			}
		}
		return head;
	}

	public static void popStackSetMap(Stack<Node> stack, HashMap<Node, Node> map) {
		Node popNode = stack.pop();
		if (stack.isEmpty()) {
			map.put(popNode, null);
		} else {
			map.put(popNode, stack.peek());
		}
	}
	
	/*
	 * 先序遍历
	 */
	public static void printPreOrder(Node head) {
		if (head == null) {
			return;
		}
		System.out.print(head.value + " ");
		printPreOrder(head.left);
		printPreOrder(head.right);
	}

	/*
	 * 中序遍历
	 */
	public static void printInOrder(Node head) {
		if (head == null) {
			return;
		}
		printPreOrder(head.left);
		System.out.print(head.value + " ");
		printPreOrder(head.right);
	}

	public static void main(String[] args) {
		int[] uniqueArr = { 3, 4, 5, 1, 2 };
		Node head = getMaxTree(uniqueArr);
		
		
		printPreOrder(head);
		System.out.println();
		printInOrder(head);

	}

}

题目:

给定一个整型矩阵map,其中只有0和1两种,求其中全是1的所有矩形区域中,最大的矩形区域为1的数量

例如:

1,1,1,0

其中,最大的矩形区域有3个1,所以返回3

两种解法:

public class MaximalRectangle {

	public static int maxRecSize(int[][] map) {
		if (map == null || map.length == 0 || map[0].length == 0) {
			return 0;
		}
		int maxArea = 0;
		int[] height = new int[map[0].length];
		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map[0].length; j++) {
				height[j] = map[i][j] == 0 ? 0 : height[j] + 1;
			}
			maxArea = Math.max(maxRecFromBottom(height), maxArea);
		}
		return maxArea;
	}

	public static int maxRecFromBottom(int[] height) {
		if (height == null || height.length == 0) {
			return 0;
		}
		int maxArea = 0;
		Stack<Integer> stack = new Stack<Integer>();
		for (int i = 0; i < height.length; i++) {
			while (!stack.isEmpty() && height[i] <= height[stack.peek()]) {
				int j = stack.pop();
				int k = stack.isEmpty() ? -1 : stack.peek();
				int curArea = (i - k - 1) * height[j];
				maxArea = Math.max(maxArea, curArea);
			}
			stack.push(i);
		}
		while (!stack.isEmpty()) {
			int j = stack.pop();
			int k = stack.isEmpty() ? -1 : stack.peek();
			int curArea = (height.length - k - 1) * height[j];
			maxArea = Math.max(maxArea, curArea);
		}
		return maxArea;
	}

	public static void main(String[] args) {
		int[][] map = { { 1, 0, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 0 }, };
		System.out.println(maxRecSize(map));
	}

}
public class Exam {
	static int width,height;
	static int max=0;
	public static void dg(int sz[][],int x,int y,int w,int h)
	{
		int num_1=0;
		for(int i=0;i<w;i++)
		for(int j=0;j<h;j++)
		{
			if(sz[x+i][y+j]==1)
			{
				num_1++;
			}
		}
		if((w*h)==num_1)
		{
			if(num_1>max)
			{
				max=num_1;
			}
			if(w+1+x<=width)
			{dg(sz,x,y,w+1,h);}
			if(h+1+y<=height)
			{dg(sz,x,y,w,h+1);}
		}
	}
	public static void main(String args[])
	{
		width=5;
		height=5;
		int shuzu[][]={{1,1,1,1,1}
					,  {1,0,1,0,1}
					,  {1,1,1,1,1}
					,  {1,1,1,0,1}
					,  {1,1,1,1,0}
		
						};
		for(int i=0;i<width;i++)
		for(int j=0;j<height;j++)	
		{
			dg(shuzu,i,j,1,1);
		}
		System.out.print(max);
	}
}
Java把V3音频文件转化为wav文件的算法的代码 将写内容过程经常用到的内容段做个备份,如下内容内容是关于Java把V3音频文件转化为wav文件的算法的内容。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.File... 阅读详情

相关推荐

基于Python3.6实现Java版murmurhash算法

Python3.6 实现java1.8 murmurhash 加密算法前因后果以下是初稿代码,验证无误(至少我的实例中没有出现偏差) 前因后果 由于最近工作涉及到python操作Java项目的缓存问题,而Jedis中默认使用的murmurhash算法与python版本的不互通,后来尝试使用Jpype调用Java代码实现加密,但是迫于强迫症以及减少进程消耗资源,强迫自己调试了一天终于实现python3.6版本的murmurhash并且与Java1.8版本的Jedis中默认的加密算法互通。 以下是初稿代码,验证

qq_25262201的博客 903

Java基础算法看这一篇就够了,简单全面一发入魂

一、算法 编写一段计算机程序一般都是实现一种已有的方法来解决某个问题。这种方法大多和使用的编程语言无关,它适用于各种计算机及编程语言。是这种方法而非计算机程序本身描述了解决问题的步骤。在计算机科学领域,我们用算法这个词来描述一种有限、确定、有效的并适合用计算机程序来实现的解决问题的方法。算法是计算机科学的基础,是这个领域的核心。 要定义一个算法,我们可以用自然语言描述解决某个问题的过程或是编写一点程序来实现这个过程。 大多数算法都需要适当地组织数据,而为了组织数据就产生了数据结构,数据结构也是计算机科学研究

学Java,找哪吒 1万+

Java学习笔记-XXH3哈希算法

Python可以提供第三方库的支持,相关的使用也比较简单,只需要安装第三方库即可。Java同样提供了第三方库的支持,只需要引入相关的依赖包。

PURSUE ONE PIECE 1495

Java 数据结构与算法

本文主要对二分查找和时间复杂度的总结。

goal11111的博客 2422

C++开发基础之掌握常用的三种异步编程模型

以上是三种常见的C++异步编程模型,每种模型都有其适用的场景和特点。根据具体需求,你可以选择合适的模型来进行异步编程。

dotnet研习社 2175

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

给定整形矩阵map,计算最大矩形区域为1的数量

给定整形矩阵map,计算最大矩形区域为1的数量 如题: 思路: 此处需要用到单调栈 1.首先对每一行进行遍历,并构造以当前行作为底部,的一个直方图。 举个例子,假设数据如下: 3 4 1 0 1 1 1 0 1 0 1 1 1 1 那么先遍历第一行,得到的直方图就是 1 0 1 1,...

Willen_的博客 579

统信UOS系统网络服务异常排查:WIFI图标消失与网络设置缺失的解决方案

本文详细解析了统信UOS系统WIFI图标消失与网络设置缺失的常见问题,提供了从基础修复到进阶排查的完整解决方案。重点分析了NetworkManager服务异常的根本原因,包括系统更新中断、权限配置错误等,并给出实用的命令行操作指南和预防措施,帮助用户快速恢复网络功能。

weixin_29234239的博客 613

JAVA之——经典算法50题

转载请注明出处:http://blog.youkuaiyun.com/l1028386804/article/details/51097928/******************************************************************************** @author liuyazhuang &lt;1028386804@qq.com&gt;********...

冰河的专栏 9万+

避开奸商套路!手把手教你用Thaiphoon Burner和CPU-Z,一眼看穿内存SPD信息有没有被篡改

本文教你使用Thaiphoon Burner和CPU-Z工具,快速识别内存SPD信息是否被篡改,避免购买到虚标频率或假冒颗粒的内存条。通过详细步骤和实战案例,帮助用户掌握内存检测技巧,确保硬件购买的透明度和安全性。

weixin_32228501的博客 679

基于CRU和WorldClim的高分辨率(1km)气候数据生成

基于CRU和WorldClim的高分辨率(1km)气候数据生成

lhq7842955的博客 1691

python3 - AES 加密实现java中SHA1PRNG 算法

python3 - Java AES 加密实现java中SHA1PRNG 算法 Max.Bai 2019-02 0x00 事由 最近和java项目对接遇到AES加密算法,java代码有SecureRandom.getInstance("SHA1PRNG"); python实在找不到对应的方法,C#,php,js代码各种查到,大家都有遇到,解决的不多,C# 直接用java算出key,然...

Max's Note 1万+

QGroundControl实现多机控制

前言 作为西安电子科技大学的本科生一名,目前在研究关于无人机导航规划与轨迹控制方面。 目前在跟导师做关于雷达无人机的一个项目,在这里记录一下关于QGC地面站实现多机控制的一些方法。 某些地方写的可能不是很完善,欢迎大家补充。 目前该文章还未写完,后期本人会继续编写 多机控制原理 多机地面站支持TCP,UDP和串口等三种连接方式,首先我们需要对这两种连接方式抽象出一个基类LinkInterface,提供两个虚函数分别对应于数据接受和发送处理,针对于不同的连接方式实现TCP,UDP和串口连接相对应的子类TCPL

Phillweston的博客 8428

java大数运算详解【其五】大数乘法之平方算法之ToomCook3平方算法

1.3、ToomCook3平方算法(三分展开式算法) /** * 使用3路Toom-Cook平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen和squareKaratsuba算法。 */ private BigInteger squareToomCook3() { int len = mag.length; // k是...

qq_25675517的博客 1161

SAP_MM模块库存概览俄罗斯报表简介

本文介绍了SAP MM模块中"库存概览俄罗斯报表"的功能与应用。该报表主要用于查看物料在不同库存地点和类型的库存情况,并满足俄罗斯当地法规要求。文章解释了"俄罗斯报表"可能指代本地化合规库存报表或客户自定义报表,详细说明了事务代码J3RFLVMOBVEDH的操作步骤,包括公司代码、物料编码、日期范围等查询条件,并解释了报表中各字段含义如期初期末库存数量与价值。最后强调在物料分类账处理完成后使用该报表可获得实际库存价值,为SAP用户提供了实用的库存管理参考。

我小时候很黑的博客 1084

【FISCO-BCOS】十一、一键部署

一键部署包括以下服务:节点(FISCO-BCOS 2.0+)、管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、节点前置子系统(WeBASE-Front)、签名服务(WeBASE-Sign)。部署成功后,登录此网站:http://localhost:5000 访问WeBASE管理平台。快速搭建WeBASE管理台环境,方便用户快速体验WeBASE管理平台。修改节点管理子系统和签名服务组系统的mysql数据库配置。如使用root账户:改为。配置方法:参考如下指令。

naihe_fish的博客 2595

python3.6 java_基于Python3.6实现Java版murmurhash算法

Python3.6 实现java1.8 murmurhash 加密算法前因后果由于最近工作涉及到python操作Java项目的缓存问题,而Jedis中默认使用的murmurhash算法与python版本的不互通,后来尝试使用Jpype调用Java代码实现加密,但是迫于强迫症以及减少进程消耗资源,强迫自己调试了一天终于实现python3.6版本的murmurhash并且与Java1.8版本的Jedi...

weixin_36469726的博客 328

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java DES3算法在nodejs中的写法

背景 项目需要与客户那边对接,其中有个数据需要用DES3加密,对方提供了java版本的加密算法代码 代码如下: private static final String SENSITIVE_INFO_SECRET_KEY = "58cf16b25485a0116b85806bba9ca7e4"; private static final String KEY_ALGORITHM = "DESede"; /** 偏移量 */ private static String IV

weixin_35167977的博客 464

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java sha-3,【Java小工匠】消息摘要--SHA3算法

1、SHA3概述1.1 SHA3简介由于近年来对传统常用Hash 函数如MD4、MD5、SHA0、SHA1、RIPENMD 等的成功攻击,美国国家标准技术研究所(NIST)在2005年、2006年分别举行了2届密码Hash 研讨会;同时于2007年正式宣布在全球范围内征集新的下一代密码Hash算法,举行SHA-3竞赛·新的Hash算法将被称为SHA-3,并且作为新的安全Hash标准,增强现有的F...

weixin_30802953的博客 1267

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【已解决】用JAVA代码实现递归算法-从自然数中取3个数进行组合之递归算法-用递归算法找出 n(n>=3) 个自然数中取 3 个数的组合。

本关任务:用递归算法找出 n(n>=3) 个自然数中取 3 个数的组合。

海海不掉头发的的博客 348

Java中实现‌‌SHA-3算法介绍、应用场景和示例代码

SHA-3(Secure Hash Algorithm 3)是由国家标准与技术研究所(NIST)发布的最新哈希标准。它是基于Keccak算法,提供了可变长度的输出,最常用的输出长度为224位、256位、384位和512位。SHA-3设计的初衷是为了增强安全性,并提供与SHA-2不同的结构。基本原理SHA-3使用一种新的构造方法,称为“吸收-分离”(sponge construction),首先将输入数据“吸收”到状态中,然后生成输出。这种结构提供了灵活性,可以生成不同长度的哈希值。哈希过程。

a_beiyo的博客 960

【亲测免费】 DelphiXE10.3与Java互通AES加解密算法

DelphiXE10.3与Java互通AES加解密算法 去发现同类优质开源项目:https://gitcode.com/ 资源介绍 本仓库提供了一个名为“DelphiXE10.3与Java互通AES加解密算法,亲测可用.zip”的资源文件。该资源文件包含了DelphiXE10.3与Java之间互通的AES加解密算法实现,经过实际测试,确保其可用性。 功能特点 支持的算法:ECB、CBC 支持的密...

gitblog_09810的博客 299

java LS3/NS3球体生成算法及其实现(LS3/NS3 sphere generation algorithm and its implementation)

本文提出了一种基于48对称性的高效朴素球体体素生成算法(LS3)。该算法将球体分割成48个对称区域(primaquadraginta),仅计算1/48区域的点后通过对称变换生成完整球体。实现包含5种特殊函数处理不同对称情况(如边缘点、重复点等),并使用哈希表高效存储三维坐标点。通过输入球心坐标和半径,算法能正确输出所有整数坐标点及总点数,如半径3时生成102个点。相比传统方法,该算法显著减少了计算量,适合计算机图形学中的体素化显示需求。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 5404

Java 算法 大于5的数与3和4的关系

@一道算法题(大于5的数与3和4的关系)的简单解法 一道校招算法题的简单解法 网上看的题目,是多益网络的校招算法笔试题。我也要投简历给多益了,所以就在网上看了看多益以前的面试题。希望我这次面多益能过。(感慨一句,转行社招真难,这年头连给个面试机会都不容易) 这道题意思是给定一个大于 5 的数 x,这个数与 3、4 有如下关系: x = 3 * n + 4 * m, 其中 6 = 3 * 2 + 4 * 0 7 = 3 * 1 + 4 * 1 8 = 3 * 0 + 4 * 2 9 = 3 * 3 + 4 *

qq_34552131的博客 787

java播放v3录音_Java把V3音频文件转化为wav文件的算法

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org.apache.c...

weixin_35676977的博客 662
上一篇: Netty处理TCP连接的session
下一篇: Netty线程模型
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值