Java与算法(11)

避坑指南:在Oracle 11g的Java Source里手写SM4算法,我踩过的那些雷 本文详细介绍了在Oracle 11g的Java Source环境中手写SM4加密算法的实战经验与避坑指南。针对Oracle 11g的JVM限制,提供了SM4核心算法实现、数据库集成步骤、性能优化及安全加固方案,帮助开发者高效实现国密标准算法的数据库集成,避免常见错误和性能问题。 阅读详情

Java与算法(11)

1.通过给定一个有序数组生成一棵平衡二叉搜索树
public class BuildAVL {
	public static class Node {
		public int value;
		public Node left;
		public Node right;

		public Node(int data) {
			this.value = data;
		}
	}
	
	public static Node build(int[] array)  {
		if (array==null) {
			return null;
		}
		
		return buildtree(array, 0,array.length-1);
	}
	public static Node buildtree(int[] array,int start,int end) {
		if (start>end) {
			return null;
		}
		
		int mid = (start+end)/2;
		Node root = new Node(array[mid]);
		root.left = buildtree(array, start, mid-1);
		root.right = buildtree(array, mid+1, end);
		
		return root;
	}
	public static void print(Node root) {
		if (root==null) {
			return;
		}
		print(root.left);
		System.out.print(root.value+"  ");
		print(root.right);
	}
	public static void main(String[] args) {
			int[] a = {1,4,9,15,26,33,45,59,62,79};
			Node root = build(a);
			print(root);
	}

}
2.判断一棵树是否为二叉搜索树和完全二叉树
public class isBSTandCBT {
	List<Integer> list = new LinkedList<>();
	public static class Node {
		int data;
		Node left;
		Node right;
		public Node(int data) {
			// TODO Auto-generated constructor stub
			this.data = data;
			left = null;
			right = null;
		}
	}
	
	
	public void toArrry(Node root) {
		if (root==null) {
			return;
		}
		
		toArrry(root.left);
		list.add(root.data);
		toArrry(root.right);
	}
	public boolean isBST() {
		for(int i=0;i<list.size()-1;i++) {
			if (list.get(i+1)<list.get(i)) {
				return false;
			}
		}
		return true;
	}
	public static boolean isCBT(Node head) {
		if (head == null) {
			return true;
		}
		Queue<Node> queue = new LinkedList<Node>();
		boolean leaf = false;
		Node l = null;
		Node r = null;
		queue.offer(head);
		while (!queue.isEmpty()) {
			head = queue.poll();
			l = head.left;
			r = head.right;
			if ((leaf && (l != null || r != null)) || (l == null && r != null)) {
				return false;
			}
			if (l != null) {
				queue.offer(l);
			}
			if (r != null) {
				queue.offer(r);
			} else {
				leaf = true;
			}
		}
		return true;
	}
	
	

	public static void main(String[] args) {
		Node head = new Node(4);
		head.left = new Node(2);
		head.right = new Node(6);
		head.left.left = new Node(1);
		head.left.right = new Node(3);
		head.right.left = new Node(5);
		isBSTandCBT isBSTandCBT  = new isBSTandCBT();
		isBSTandCBT.toArrry(head);
		System.out.println(isBSTandCBT.isBST());
		System.out.println(isCBT(head));
	}

}
3.给定一个数组,判断是否可能为一棵二叉搜索树后序遍历的结果
public class BSTArray {
	
	public static class Node {
		int data;
		Node left;
		Node right;
		public Node(int data) {
			// TODO Auto-generated constructor stub
			this.data = data;
			left = null;
			right = null;
		}
	}
	
	
	
	public boolean isPostArray(int[]  array) {
		if (array==null && array.length==0) {
			return false;
		}
		
		return isBSTArray(array, 0,array.length-1);
	}
	
	
	public boolean isBSTArray(int[] array,int start,int end) {
		if (start==end) {
			return true;
		}
		int less = -1;
		int more = end;
		for(int i=start;i<end;i++) {
			if (array[i]<array[end]) {
				less= i;
			} else {
				more=more==end?i:more;
			}
		}
		
		if (less==-1 || more==end) {
			return isBSTArray(array, start, end-1);
		}
		if (less!=more-1) {
			return false;
		}
	return isBSTArray(array, start, less) && isBSTArray(array, more, end-1);
		
	}
	
	
	public Node arrayToBst(int[] array) {
		return toBST(array,0,array.length-1);
	}
	
	
	public Node toBST(int[] array,int start,int end) {
		if (start>end) {
			return null;
		}
		Node root = new Node(array[end]);
		int less = -1;
		int more = end;
		for(int i=start;i<end;i++) {
			if (array[end]>array[i]) {
				less=i;
			}  else {
				more= more==end?i:more;
			}
		}
		
		root.left=toBST(array, start, less);
		root.right = toBST(array, more, end-1);
		return root;
		
	}
	public void prinf(Node root) {
		if (root==null) {
			return ;
		}
		prinf(root.left);
		System.out.print(root.data+" ");
		prinf(root.right);
	}
	
	public static void main(String[] args) {
			BSTArray bstArray = new BSTArray();
			int[] a={1,4,3,7,27,10,5};
			System.out.println(bstArray.isPostArray(a));
			Node root = bstArray.arrayToBst(a);
			bstArray.prinf(root);
	}

}
Oracle 11g 数据库内嵌SM4算法:从Java源码到SQL调用的完整实践 本文详细介绍了在Oracle 11g数据库中集成SM4算法的完整实践,包括Java源码实现、SQL调用封装及性能优化建议。通过SM4算法实现字段级加密,提升数据安全性,同时保持应用代码的简洁性。适用于金融等对数据安全要求高的行业场景。 阅读详情

相关推荐

Oracle 11g数据库内嵌SM4国密算法:从Java源码到SQL函数的完整实践

数据加密是保障数据安全的核心技术之一,其原理是通过特定算法将明文信息转换为不可读的密文,防止未授权访问。在数据库层面实现加密,能够将安全能力下沉,对应用层透明,有效平衡安全与查询效率。国密算法SM4作为我国自主设计的商用密码标准,在金融、政务等领域有广泛应用需求。本文聚焦于在Oracle 11g老版本数据库中,通过其内嵌JVM扩展机制,将纯净的SM4算法Java源码封装为原生SQL函数,实现字段级透明加密与解密。该方案特别适用于应用层改造困难、需快速满足数据安全合规要求的存量系统,为数据脱敏、合规审计提供了

weixin_31315567的博客 294

chacha20加密c语言算法,Java 11的新加密算法ChaCha20-Poly1305

ChaCha20-Poly1305 介绍Java 11新增加了加密算法ChaCha20-Poly1305。ChaCha20-Poly1305相关的名词需要解释一下:ChaCha20是一种流式对称加密算法。Poly1305是一种带密码的消息摘要算法。ChaCha20-Poly1305是一种流式对称加密算法。说明:我并没有找到Java 11中的Poly1305算法API,于是按照RFC7539实现了一...

weixin_32365089的博客 3887

【Java学习】第53节:11种常见的排序算法

Java是一种广泛使用的编程语言,由Sun Microsystems(现在是Oracle Corporation)首次推出。它是一种跨平台的编程语言,意味着您可以编写一次代码,然后在多个不同的计算机系统上运行,而无需对其进行修改。Java被广泛用于开发各种类型的应用程序,包括企业级应用、移动应用、Web应用、游戏等。

m0_46013789的博客 1858

11 种加密 & 哈希算法的原理及其 Java 实现

11 种加密 & 哈希算法的原理及其 Java 实现一、目的二、运行环境三、基本原理及步骤(I)各种加密算法的原理:① DES 数据加密标准(Data Encryption Standard):算法介绍算法流程优点缺点破解方式适用场景安全性② 3DES(DES ede)(或称为Triple DES)——是三重数据加密算法(TDEA,Triple Data Encryption Algori...

carol980206的博客 1万+

南京邮电大学电工电子基础B实验六(组合逻辑电路)

南京邮电大学电工电子基础B实验五(组合逻辑电路);电工电子;南京邮电大学;计算机学院;实验报告;电路图;

亦是远方的小地方 1万+

强化学习——day16 动态规划算法

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略

想太多的学习日志 1550

算法第四版linux环境搭建基于Java11

Hello World in Java (Linux) https://lift.cs.princeton.edu/java/linux/ This document instructs you on how to set up a Java programming environment for your Linuxcomputer. It also provides a step-by-step guide for creating and compiling a Java program...

明阳 636

SAR学习笔记后续-phased工具箱介绍

摘要:相控阵雷达介绍,基于仿真对MATLAB中phased工具箱进行了详细介绍

yjh_2019的博客 1万+

算法:LeetCode11_盛最多水的容器的容器_java实现

【代码】算法:LeetCode11_盛最多水的容器的容器_java实现。

工匠精神coding,终生学习 190

dummy机械臂代码学习(六)

CLI-Tool文件夹下又包含四个子文件夹,以及一个gitignore文件、一个run_shell.py的python文件、一个run.bat文件和一个zadig exe文件。库解析命令行参数,并根据不同的命令执行相应的操作。Zadig是一个用于Windows操作系统的开源工具,它的主要功能是安装和配置USB驱动程序。的目的呢就是确保在版本控制过程中,不必要的或自动生成的文件被忽略掉,来保持代码仓库的干净和整洁。,DummyStudio的软件作者已放在GitHub,我们主要看CLI-Tool文件夹就行。

jumaohhh的博客 1432

TS808效果器制作教程

TS808效果器制作教程 可以在立创商城购买到大部分的电阻电容和IC,音频接口,踩钉,电位器和电源接口可以去某宝看看都买得到的。链接https//pan.baidu.com/s/1QId1eIE3fJ2u5NLBSISvGA。安装过程过于繁琐,把所有元器件按照图纸焊接完成就可以调试了,祝你们成功!这是TS808经典效果器制作过程的记录。IC是JRC4558。...

qq_18948149的博客 3422

浅谈JAVA11中新增的加密算法

时刻关注JDK进程或Oracle的童鞋都知道,JDK 11 已于6月底进入 Rampdown Phase One 阶段,当时 JDK 11 的所有新特性就已被冻结,不再加入新的 JEP 。因为近期写了一些关于DES,3DES和AES算法的一些博文,所以对于JDK11里所包含的17个新的JEP之一---ChaCha20 和 Poly1305 加密算法----就格外留意. Chacha20-Poly1...

weixin_34205076的博客 466

微积分,用编程理解高数(python,C,C++)

很好理解,导数中,x是哪一点的导数,dx是精准度,y等于f(x)即函数。导数结果就是瞬时变化率。积分很好理解,a为下限,b为上限,y为函数,结果就是y=f(x)下a到b的面积。只要用定积分代入a=0,b=10(10s)y=x(1*x=1)就得到结果。F(x)为原函数,即微分后的函数是f(x)dx,微分前是F(x)一列车初始速度为10m/s,加速度为。才几十行代码,微积分也不是很难啊。,问速度达到20时车走了多少米。

linhhanpy的博客 1177

java学习之路:11.数组排序算法

介绍了数组中常用的冒泡排序,直接排序,倒置排序。

花狗Fdog的博客 1451

基于STM32设计的心率脉搏测量仪(项目资料ID:9)

本设计基于STM32F103单片机开发了一款便携式心率脉搏测量仪,通过光电传感器采集脉搏信号,经放大(约1200倍)、滤波(低通及四阶低通滤波)、比较及偏置电压调理后,由STM32进行ADC采样与数据处理。硬件采用Altium Designer设计,包含信号调理电路(限定心率范围43.4-800次/分钟)及电源管理模块;软件基于STM32CubeMX开发,利用队列存储和时间间隔平均算法优化精度,实现多终端显示(OLED实时心率/动画、MATLAB波形分析、蓝牙传输至手机)。系统支持自动启停(检测脉搏启

以培养嵌入式工程师为己任 1万+

SAP Joule 在顾问与开发者场景的双擎定位:Joule for Consultants 与 Joule for Developers 全面解读

SAP推出企业级AI助手Joule,分为顾问版(Joule for Consultants)和开发者版(Joule for Developers)两个版本。顾问版聚焦咨询业务,整合SAP知识库和方法论,辅助方案设计、差距分析和实施落地;开发者版嵌入开发工具链,支持代码生成、解释、测试和迁移。两者共享智能底座但面向不同场景:顾问版优化项目交付流程,开发者版提升工程效率。典型案例显示,Joule能有效缩短云转型周期,实现从业务咨询到技术落地的无缝衔接。该产品通过AI代理和知识图谱技术,为企业数字化转型提供端到端

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 351

java算法day11

所以如果调整一下前序遍历的顺序,先加左节点,再加右节点,那么得到的结果就是按根右左规则得到的。2.前序遍历是根左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。与中序遍历的非递归方法相比,前序遍历的非递归实现更为直观,因为它可以直接按照遍历顺序处理节点,而不需要像中序遍历那样先到达最左节点。如果该节点有右子节点,将右子节点压入栈中。

TOMOT77的博客 948

STM32F407中文手册

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

从原理到实战:Java 11 种经典排序算法全解析(附完整代码)(优化版)

本文系统讲解了11种经典排序算法,包括插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序和计数排序等。每种算法都提供了Java实现代码,并详细分析了核心思想、时间/空间复杂度、稳定性和适用场景。文章特别对比了不同规模数据下的最优选择:小规模数据推荐插入/选择排序;中等规模适用希尔排序;大规模数据首选快速排序(非稳定)或归并排序(稳定)。针对特殊场景如元素范围小的整数数组,计数排序性能最优。通过完整代码示例和性能对比,帮助开发者深入理解排序逻辑,在实际开发中精准选择最优算法方案。

2402_86887479的博客 1491

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java算法练习4.11

文章目录题目01编码中遇到的问题测试结果全代码题目02编码中遇到的问题测试结果全代码 依据大佬建议的刷题步骤(杭电oj题目) 题目01 linkOJ @description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。 Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。 Output 对于每组输入数据,输...

baidu_41778202的博客 487

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

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

Java与算法之(11) - 合并排序

天下事,合久必分,分久必合。合并排序的基本思想正是先分再合。 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序。合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于存储合并结果。 合并分为三步: 1)两个数列在起始位置各分配一个"指针",对比指针位置的数字,取较小的数字存入辅助数组。数字被移出的一侧,指针右移一格,再次比较两个指针位置的数字,直到某一侧的指

分享知识、分享进步 2446

java 数据合并算法_Java与算法之(11) - 合并排序

天下事,合久必分,分久必合。合并排序的基本思想正是先分再合。例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序。合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于存储合并结果。合并分为三步:1)两个数列在起始位置各分配一个"指针",对比指针位置的数字,取较小的数字存入辅助数组。数字被移出的一侧,指针右移一格,再次比较两个指针位置的数字,直到某一侧的指针移出数组以...

weixin_34738304的博客 578

JAVA经典算法(11-20)

JAVA经典算法42例【11.排列组合】【12.奖金计算】【13.求加上100且加上168都可以被开方的数】【14.判断某日期是某年的第几天】【15.三数排序】【16.乘法口诀表9*9】【17.猴子吃桃子】【18.乒乓球比赛】【19.菱形打印】【20.求规律分数前n项和】 【11.排列组合】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 public class

Mr顺 716

java 从零开始手写 redis(11)COLOK 算法

java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写 redis(七)LRU 缓存淘汰策略详解。

859

Java数据结构与算法11

它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。因为只有在前面的元素比后面的元素大时才交换数据,所以交换的次数少于比较的次数。传统的冒泡算法每次排序只确定了最大值,我们可以在每次循环之中进行正反两次冒泡,分别找到最大值和最小值,如此可使排序的轮数减少一半。排序分析:待排数组中一共有6个数,第一轮排序时进行了5次比较,第二轮排序时进行了4比较,依次类推,最后一轮进行了1次比较。交换和比较的操作次数都与 N^2 成正比,由于在大O表示法中,常数忽略不计,冒泡排序的时间复杂度为。

dulalalanunu的博客 106

java算法(11)

原题:/** * Created by gouthamvidyapradhan on 28/06/2017. * <p> * There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordin

u011747152的博客 224

JAVA算法学习day11

思路:先将根节点压入栈中,然后进入第一次while循环:先把根节点弹出,然后将右节点压入栈中再将根节点压入栈中,然后再压入一个null,最后再压入左节点。思路:仍然是按照中左右的方式输出二叉树,但是这里利用了一个栈,因为栈的特性是后进后出,所以先遍历中节点,然后再遍历其他节点,此时要先遍历右节点,当有节点不为空时压入栈中,在遍历左节点,若左节点也不为空则也压入栈中,这样保证了左节点在右节点的上方,当栈中的数据输出时,保证了上方的左节点先输出,通过这种方式完成了前序遍历。思路:中序遍历是左中右,思路同上。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值