写在前面:
定义见上一篇文章
代码:
/**
* @description 最大二叉树中找a<=x<b的x
* @param min
* @param max
* @param array
* @return
*
* @author LynnWong
*/
private int[] getX(int min,int max,int[] array){
int rootSite = 0;
int n = 0;
int [] XArray = new int[array.length];
while(rootSite<array.length-1){
int root = array[rootSite];
if(root>min||root==min){
if((rootSite*2+1<array.length-1)&&(min==array[rootSite*2+1]||min<array[rootSite*2+1])&&array[rootSite*2+1] <max){
XArray[n++]=array[rootSite*2+1];
}
if((rootSite*2+1<array.length-1)&&(min==array[rootSite*2+2]||min<array[rootSite*2+2])&&array[rootSite*2+2] <max){
XArray[n++]=array[rootSite*2+2];
}
}else
break;
rootSite++;
}
return XArray;
}
/**
* @description 元素添加到末尾,和它的父节点比,如果比它大就交换
* @param array
*
* @author LynnWong
*/
private int[] getMaxBinaryHeap(int[] array){
int N = array.length;
int maxBinaryHeap[] = new int[N];
int root;//根的值
int heapSize = 0;//记录插入位置
for(int num : array){
maxBinaryHeap[heapSize]=num;
++heapSize;
int pointer = heapSize-1;//当前指向的数组元素位置
while(pointer!=0){
int leafPointer = pointer;//叶子节点位置
pointer = (pointer-1)/2;//根节点位置
root = maxBinaryHeap[pointer];//根节点
if(num<=maxBinaryHeap[pointer]){//永远把当前数组元素看成叶子与其根比较或者换位
break;
}//如果根比叶子小 就交换位置
maxBinaryHeap[pointer] = num;
maxBinaryHeap[leafPointer] = root;
}
}
return maxBinaryHeap;
}
/**
* 我就喜欢测10遍!
*/
public void text(){
for(int i=0;i<10;i++){
Random rnd = new Random();
int [] lala = {rnd.nextInt(8),rnd.nextInt(8),rnd.nextInt(8),rnd.nextInt(8),rnd.nextInt(8),rnd.nextInt(8)};
int array[] =
this.getMaxBinaryHeap(lala);
// {5,2,0,0,2,0};
int result[] = this.getX(3, 6, array);
System.out.print("输入:");
for(int a : array){
System.out.print(a+" ");
}
System.out.print(" 条件: 3<=x<6");
System.out.println();
System.out.print("输出:");
for(int a : result){
System.out.print(a+" ");
}
System.out.println();
}
}
完成!
*******************分割线啊分割线*********************
完成它,共用了10分钟。听的背景音乐:《好男人》张赫宣
lysh 你也听听啊!
分享到:
相关推荐
本文将深入探讨七大经典排序算法在Java中的实现,帮助你理解和掌握这些重要的算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,通过不断交换相邻的逆序元素来逐步排序。在Java中,我们可以创建...
部分内容中提供了java二叉查找树的实现代码,包括Node类、BST类、get方法、put方法、min方法和max方法等。下面是对这些方法的详细解释: * Node类:Node类是一个私有类,用于存储树中的节点。每个节点都有一个键、...
在Java中实现堆排序时,我们通常会采用大顶堆或者小顶堆来组织数据。堆排序的时间复杂度为O(n log n),空间复杂度为O(1)。 #### 二、堆排序的步骤 1. **构建初始堆**:将无序序列构造成一个大顶堆或小顶堆。 2. **...
if (node.val <= lower || node.val >= upper) { return false; } return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper); } } ``` Python 解题代码: ```python class ...
- 二叉堆是一种特殊的完全二叉树,分为两种类型:最大堆(Max Heap)和最小堆(Min Heap)。在最大堆中,每个节点的值都大于或等于其子节点的值;在最小堆中则相反。 - 在堆排序中,通常使用最大堆,因为我们需要...
在Java中,二叉堆常用于实现优先队列(Priority Queue),它具有高效的插入、删除和查找操作。下面我们将深入探讨二叉堆的数据结构、实现方式以及其在Java中的应用。 二叉堆的结构: 二叉堆通常以完全二叉树的形式...
在LeetCode的第783题“二叉搜索树节点最小距离”中,目标是找到一个给定二叉搜索树(BST)中的任意两个节点,使得它们之间的差值最小,并返回这个最小差值。二叉搜索树是一种特殊的二叉树,其中每个节点的左子树中的...
在Java中实现区间操作,我们可以自定义类或者使用已有的库来实现。 首先,我们可以通过创建一个名为`Interval`的类来表示区间,它包含两个属性:一个代表起点,另一个代表终点。例如: ```java public class ...
堆通常分为两种类型:最大堆(Max Heap)和最小堆(Min Heap)。在最大堆中,每个父节点的值都大于或等于其子节点;在最小堆中,每个父节点的值都小于或等于其子节点。这种特性使得堆成为实现优先队列的理想选择。 ...
if (minStack.empty() || x <= minStack.top()) { minStack.push(x); } } void pop() { if (mainStack.top() == minStack.top()) { minStack.pop(); } mainStack.pop(); } int getMin() { return min...
在Java中实现Dijkstra算法,可以使用二维数组表示图的邻接矩阵,如下所示: ```java public class DijkstraAlgorithm { public static void dijkstra(int[][] graph, int start) { int n = graph.length; int[] ...
- **问题描述**:Top K 问题通常是指找出一组数据中最大的 K 个数或最小的 K 个数。 - **解决方案**: - 使用大顶堆(求最小的 K 个数)或小顶堆(求最大的 K 个数)的数据结构。 - 遍历数组,将前 K 个元素加入堆...
在JavaScript中,我们可以创建一个二叉搜索树类来实现这些功能。以下是对标题和描述中提到的知识点的详细说明: 1. **二叉搜索树定义**: 二叉搜索树(Binary Search Tree,BST)的每个节点最多有两个子节点,分为...
堆分为两种主要类型:大顶堆(Max Heap)和小顶堆(Min Heap)。大顶堆中每个节点的键值都大于或等于其子节点的键值,而小顶堆则相反,每个节点的键值都小于或等于其子节点。 堆的几个关键概念: 1. 父节点和子节点...
本主题将深入探讨二叉树的算法拓展,特别是关于交换左右子树、将二叉链表转换为完全二叉树以及寻找二叉树中的最大节点值。 首先,我们来理解一下二叉树的基本概念。二叉树是由n(n≥0)个有限节点组成的一个有穷...
在给定的文件“数据结构中算法的实现.pdf”中,应该会详细讲解这些概念,并提供具体的伪代码或实际的编程语言实现,比如C++、Python或Java。通过阅读这份文档,你可以深入理解关键路径算法的工作原理,并学习如何将...
- **实现细节**:首先将前k个元素加入到堆中,然后遍历剩余的元素,如果当前元素比堆顶元素小,则替换堆顶元素并重新调整堆。 - **扩展应用**:这种方法还可以用于处理大数据集中的top-k问题,例如在推荐系统中找到...
设`dp[i]`表示以第i个元素结尾的子数组的最大和,则有状态转移方程`dp[i] = max(dp[i-1]+nums[i], nums[i])`。最后,`dp[n-1]`就是所有子数组中的最大和,其中n为数组长度。 **4. 在二元树中找出和为某一值的所有...