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);
}
}
分享到:
相关推荐
这个"Java实例 - 获取二维数组长度源代码-详细教程.zip"文件提供了一个详细的指南,教您如何在Java中实现这一功能。 首先,二维数组的声明通常如下所示: ```java int[][] array = new int[rows][columns]; ``` ...
Java找出数组中重复的数字 本文主要是介绍了Java语言中如何找出数组中重复的数字。该问题是剑指offer中的经典面试题,旨在考察程序员的编程能力和算法思维。 问题描述 在一个长度为n的数组里的所有数字都在0~n-1...
这个程序首先计算了数组`numbers`中所有数字的总和,然后找出最大值和最小值,并最后计算了平均值。 总之,一维数组是Java编程中处理数据集合的基本工具,理解其定义、创建、初始化和访问方法对编写有效的Java程序...
在编程领域,有时我们需要找出数组中出现次数超过一半的数字。这个任务在Java中可以通过多种方法来实现。以下就是四种不同的方法,每种方法都有其独特的思路和效率。 方法一:数组排序 一种常见的方法是先对数组...
该问题描述为:在一个长度为n的数组里的所有数字都在0到n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 关键技术点: 1. 哈希表...
通过将一个数组的所有元素添加到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
请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104025402
这个问题可以通过多种方法解决,例如使用哈希表(HashMap在Java中)或者数组来统计每个字符出现的次数,然后找出出现次数最多的那个。接下来我们将详细探讨这两种方法。 1. **哈希表法**: - 初始化一个哈希表,键...
在Java编程中,找出两个数组中的重复元素是一个常见的问题,特别是在数据处理和算法设计中。本示例提供了源代码来解决这个问题,确保了代码的正确性,并在优化方面达到了适中的水平。以下是对该主题的详细说明: 1....
本篇文章将深入探讨如何处理不规则二维数组,并介绍两种方法来找出数组中的列最小值,这两种方法都涉及到数组的倒置操作。这些知识对于提升你的编程技能,尤其是面试准备(例如华为的机试题)是十分有价值的。 首先...
此外,实战习题可能会涉及实际问题的解决,比如使用数组解决实际编程问题,如统计数组中元素出现的次数、找出最大值或最小值,或者实现某种特定的数据结构(如栈或队列)。 通过这些习题的解答,开发者不仅可以巩固...
1. **合并数组法**:将两个数组合并成一个大的正序数组,然后直接找出中位数。这种方法简单直观,但时间复杂度较高,为O(n + m),其中n和m分别是两个数组的长度。在面试场景下,这样的解决方案可能不够高效。 2. **...
数组是编程语言中基础且重要的数据结构之一,对于初级JAVA学习者来说,理解和掌握数组的用法至关重要。这里我们有12道精选的数组例题,它们可以帮助你深入理解Java中的数组概念及其应用。 1. **数组定义与初始化**...
本文将详细讲解如何在C语言中实现这个功能,以及它背后的逻辑和相关知识点。 首先,理解数组的基本概念至关重要。数组是一系列相同类型的数据元素的集合,它们在内存中连续存储,可以通过索引来访问每个元素。在...
在这个场景中,我们关注的是如何在Java中处理数组中的元素组合问题。数组的组合问题通常涉及到组合数学和算法设计,它可以帮助我们找出所有可能的子集或对,而无需考虑顺序。 标题“Java写的一个数组的中,m个元素...
总之,找出二维数组的鞍点是一个涉及数组遍历和比较的简单但有趣的编程任务。通过这个任务,我们可以练习基础的编程技巧,以及如何有效地处理数据结构和算法。对于初学者,这是一个很好的练习,对于有经验的程序员,...
5. **数组长度**:每个数组都有一个内置属性`length`,表示数组的长度,例如`array.length`返回数组的元素个数。 6. **数组操作**:Java标准库提供了`java.util.Arrays`类,包含了许多对数组的操作方法,如`sort()`...