`

java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字

 
阅读更多

public class OcuppyMoreThanHalf {

	/**
	 * Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
	 * two solutions:
	 * 1.O(n)
	 * see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性
	 * 2.O(nlogn)
	 * 排序。中间那个元素就是所求
	 */
	public static void main(String[] args) {
		int[] a={4,3,4,2,4,5,4,4};
		
		int result=find(a);
		System.out.println(result);
		
		result=findAfterSort(a);
		System.out.println(result);
	}

	public static int find(int[] a){
		if(a==null||a.length==0){
			return -1;
		}
		int len=a.length;
		int candidate=a[0];
		int times=1;
		for(int i=1;i<len;i++){
			if(candidate!=a[i]){
				times--;
				if(times==0){
					candidate=a[i];
					times=1;
				}
			}else{
				times++;
			}
		}
		return candidate;
	}
	public static int findAfterSort(int[] a){
		if(a==null||a.length==0){
			return -1;
		}
		myQuickSort(a,0,a.length-1);
		int midIndex=a.length/2;
		return a[midIndex];
	}
	public static void myQuickSort(int[] a,int start,int end){
		if(start>=end){
			return;
		}
		boolean flag=false;
		int s=start,e=end;
		while(s<e){
			if(a[s]>a[e]){
				Helper.swap(a,s,e);
				flag=true;
			}
			if(flag){
				s++;
			}else{
				e--;
			}
		}
		myQuickSort(a,start,s-1);
		myQuickSort(a,e+1,end);
	}
}


0
0
分享到:
评论

相关推荐

    Java 实例 - 获取二维数组长度源代码-详细教程.zip

    这个"Java实例 - 获取二维数组长度源代码-详细教程.zip"文件提供了一个详细的指南,教您如何在Java中实现这一功能。 首先,二维数组的声明通常如下所示: ```java int[][] array = new int[rows][columns]; ``` ...

    Java如何找出数组中重复的数字

    Java找出数组中重复的数字 本文主要是介绍了Java语言中如何找出数组中重复的数字。该问题是剑指offer中的经典面试题,旨在考察程序员的编程能力和算法思维。 问题描述 在一个长度为n的数组里的所有数字都在0~n-1...

    Java语言编程 一维数组

    这个程序首先计算了数组`numbers`中所有数字的总和,然后找出最大值和最小值,并最后计算了平均值。 总之,一维数组是Java编程中处理数据集合的基本工具,理解其定义、创建、初始化和访问方法对编写有效的Java程序...

    基于Java代码实现数字在数组中出现次数超过一半

    在编程领域,有时我们需要找出数组中出现次数超过一半的数字。这个任务在Java中可以通过多种方法来实现。以下就是四种不同的方法,每种方法都有其独特的思路和效率。 方法一:数组排序 一种常见的方法是先对数组...

    Java 剑指offer(1) 找出数组中重复的数字.pdf

    该问题描述为:在一个长度为n的数组里的所有数字都在0到n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 关键技术点: 1. 哈希表...

    Java 实例 - 计算两个数组交集源代码-详细教程.zip

    通过将一个数组的所有元素添加到HashSet中,我们可以快速检查另一个数组中的元素是否存在于HashSet中,从而找出交集。 ```java import java.util.HashSet; public class ArrayIntersection { public static int[]...

    自定义数组中寻找最大元素位置

    本文将详细介绍如何通过编写Java程序,在一个二维数组中查找最大值及其位置。本程序适用于任何大小的数组,并能准确地返回最大值所在的行和列索引。 #### 程序结构分析 1. **类与方法定义**: - 定义了一个名为`...

    获取两个数组相同的元素或不同的元素输出

    在上述代码中,我们使用了`HashMap`来统计每个元素在两个数组中出现的次数。如果次数为2,则该元素在两个数组中都存在;如果次数为1,则该元素仅在一个数组中存在。 另一种更高效的方法是使用Java 8引入的流API...

    寻找数组中的值

    给出一个递增数组array和由array中两个数的和n,求出这两个数? 求两个递增数组的最小距离,即在两个数组中各取一个数,使得这两个数的差最小? http://blog.csdn.net/ssuchange/article/details/17402991

    【剑指offer】面试题3-数组中的重复数字

    请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104025402

    查找字符串中出现重复次数最多的字符

    这个问题可以通过多种方法解决,例如使用哈希表(HashMap在Java中)或者数组来统计每个字符出现的次数,然后找出出现次数最多的那个。接下来我们将详细探讨这两种方法。 1. **哈希表法**: - 初始化一个哈希表,键...

    java 求两个数组中重复元素源代码

    在Java编程中,找出两个数组中的重复元素是一个常见的问题,特别是在数据处理和算法设计中。本示例提供了源代码来解决这个问题,确保了代码的正确性,并在优化方面达到了适中的水平。以下是对该主题的详细说明: 1....

    java不规则二维数组倒置求列最小值

    本篇文章将深入探讨如何处理不规则二维数组,并介绍两种方法来找出数组中的列最小值,这两种方法都涉及到数组的倒置操作。这些知识对于提升你的编程技能,尤其是面试准备(例如华为的机试题)是十分有价值的。 首先...

    JAVA开发实战经典_课后习题讲解-第4章:数组习题讲解.rar

    此外,实战习题可能会涉及实际问题的解决,比如使用数组解决实际编程问题,如统计数组中元素出现的次数、找出最大值或最小值,或者实现某种特定的数据结构(如栈或队列)。 通过这些习题的解答,开发者不仅可以巩固...

    java面试-leetcode面试java编程题解之第4题寻找两个正序数组的中位数-java题解.zip

    1. **合并数组法**:将两个数组合并成一个大的正序数组,然后直接找出中位数。这种方法简单直观,但时间复杂度较高,为O(n + m),其中n和m分别是两个数组的长度。在面试场景下,这样的解决方案可能不够高效。 2. **...

    12道不错的数组例题

    数组是编程语言中基础且重要的数据结构之一,对于初级JAVA学习者来说,理解和掌握数组的用法至关重要。这里我们有12道精选的数组例题,它们可以帮助你深入理解Java中的数组概念及其应用。 1. **数组定义与初始化**...

    实现计算数组元素的最大值_在数组中找到最大值_

    本文将详细讲解如何在C语言中实现这个功能,以及它背后的逻辑和相关知识点。 首先,理解数组的基本概念至关重要。数组是一系列相同类型的数据元素的集合,它们在内存中连续存储,可以通过索引来访问每个元素。在...

    Java写的一个数组的中,m个元素的组合问题

    在这个场景中,我们关注的是如何在Java中处理数组中的元素组合问题。数组的组合问题通常涉及到组合数学和算法设计,它可以帮助我们找出所有可能的子集或对,而无需考虑顺序。 标题“Java写的一个数组的中,m个元素...

    编写程序,找出一个二维数组的鞍点,即在当前行最大,当前列最小的元素,也可能没有鞍点。

    总之,找出二维数组的鞍点是一个涉及数组遍历和比较的简单但有趣的编程任务。通过这个任务,我们可以练习基础的编程技巧,以及如何有效地处理数据结构和算法。对于初学者,这是一个很好的练习,对于有经验的程序员,...

    Java程序设计:5 数组与字符串.part1.ppt

    5. **数组长度**:每个数组都有一个内置属性`length`,表示数组的长度,例如`array.length`返回数组的元素个数。 6. **数组操作**:Java标准库提供了`java.util.Arrays`类,包含了许多对数组的操作方法,如`sort()`...

Global site tag (gtag.js) - Google Analytics