`
lynnlysh
  • 浏览: 179276 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

Java实现最大二叉堆中找min<=x<max的x们

阅读更多
写在前面:
定义见上一篇文章
代码:
/**
	 * @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实现

    本文将深入探讨七大经典排序算法在Java中的实现,帮助你理解和掌握这些重要的算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,通过不断交换相邻的逆序元素来逐步排序。在Java中,我们可以创建...

    java二叉查找树的实现代码

    部分内容中提供了java二叉查找树的实现代码,包括Node类、BST类、get方法、put方法、min方法和max方法等。下面是对这些方法的详细解释: * Node类:Node类是一个私有类,用于存储树中的节点。每个节点都有一个键、...

    堆排序,和其他排序 java 实现

    在Java中实现堆排序时,我们通常会采用大顶堆或者小顶堆来组织数据。堆排序的时间复杂度为O(n log n),空间复杂度为O(1)。 #### 二、堆排序的步骤 1. **构建初始堆**:将无序序列构造成一个大顶堆或小顶堆。 2. **...

    算法笔记,验证二叉搜索树

    if (node.val &lt;= lower || node.val &gt;= upper) { return false; } return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper); } } ``` Python 解题代码: ```python class ...

    Java实现堆排序(Heapsort)实例代码

    - 二叉堆是一种特殊的完全二叉树,分为两种类型:最大堆(Max Heap)和最小堆(Min Heap)。在最大堆中,每个节点的值都大于或等于其子节点的值;在最小堆中则相反。 - 在堆排序中,通常使用最大堆,因为我们需要...

    Binaryheap:使用数组的BinaryHeap

    在Java中,二叉堆常用于实现优先队列(Priority Queue),它具有高效的插入、删除和查找操作。下面我们将深入探讨二叉堆的数据结构、实现方式以及其在Java中的应用。 二叉堆的结构: 二叉堆通常以完全二叉树的形式...

    Java实现 LeetCode 783 二叉搜索树节点最小距离(遍历)

    在LeetCode的第783题“二叉搜索树节点最小距离”中,目标是找到一个给定二叉搜索树(BST)中的任意两个节点,使得它们之间的差值最小,并返回这个最小差值。二叉搜索树是一种特殊的二叉树,其中每个节点的左子树中的...

    java 区间

    在Java中实现区间操作,我们可以自定义类或者使用已有的库来实现。 首先,我们可以通过创建一个名为`Interval`的类来表示区间,它包含两个属性:一个代表起点,另一个代表终点。例如: ```java public class ...

    heap_implementation:在Java中实现堆数据结构

    堆通常分为两种类型:最大堆(Max Heap)和最小堆(Min Heap)。在最大堆中,每个父节点的值都大于或等于其子节点;在最小堆中,每个父节点的值都小于或等于其子节点。这种特性使得堆成为实现优先队列的理想选择。 ...

    微软公司等数据结构+算法面试100题(第1-100题)全部出炉

    if (minStack.empty() || x &lt;= minStack.top()) { minStack.push(x); } } void pop() { if (mainStack.top() == minStack.top()) { minStack.pop(); } mainStack.pop(); } int getMin() { return min...

    最短路径Dijkstra算法.docx

    在Java中实现Dijkstra算法,可以使用二维数组表示图的邻接矩阵,如下所示: ```java public class DijkstraAlgorithm { public static void dijkstra(int[][] graph, int start) { int n = graph.length; int[] ...

    java数据结构和算法

    - **问题描述**:Top K 问题通常是指找出一组数据中最大的 K 个数或最小的 K 个数。 - **解决方案**: - 使用大顶堆(求最小的 K 个数)或小顶堆(求最大的 K 个数)的数据结构。 - 遍历数组,将前 K 个元素加入堆...

    javascript数据结构之二叉搜索树实现方法

    在JavaScript中,我们可以创建一个二叉搜索树类来实现这些功能。以下是对标题和描述中提到的知识点的详细说明: 1. **二叉搜索树定义**: 二叉搜索树(Binary Search Tree,BST)的每个节点最多有两个子节点,分为...

    详解堆的javascript实现方法

    堆分为两种主要类型:大顶堆(Max Heap)和小顶堆(Min Heap)。大顶堆中每个节点的键值都大于或等于其子节点的键值,而小顶堆则相反,每个节点的键值都小于或等于其子节点。 堆的几个关键概念: 1. 父节点和子节点...

    数据结构-二叉树算法拓展

    本主题将深入探讨二叉树的算法拓展,特别是关于交换左右子树、将二叉链表转换为完全二叉树以及寻找二叉树中的最大节点值。 首先,我们来理解一下二叉树的基本概念。二叉树是由n(n≥0)个有限节点组成的一个有穷...

    数据结构中算法的实现

    在给定的文件“数据结构中算法的实现.pdf”中,应该会详细讲解这些概念,并提供具体的伪代码或实际的编程语言实现,比如C++、Python或Java。通过阅读这份文档,你可以深入理解关键路径算法的工作原理,并学习如何将...

    程序员面试题精选100题.doc

    - **实现细节**:首先将前k个元素加入到堆中,然后遍历剩余的元素,如果当前元素比堆顶元素小,则替换堆顶元素并重新调整堆。 - **扩展应用**:这种方法还可以用于处理大数据集中的top-k问题,例如在推荐系统中找到...

    微软最新面试题目

    设`dp[i]`表示以第i个元素结尾的子数组的最大和,则有状态转移方程`dp[i] = max(dp[i-1]+nums[i], nums[i])`。最后,`dp[n-1]`就是所有子数组中的最大和,其中n为数组长度。 **4. 在二元树中找出和为某一值的所有...

Global site tag (gtag.js) - Google Analytics