查找最大和次大元素(JAVA版)(分治法)
问题描述:对于给定的含有n个元素的无序序列,求这个序列中最大和次大的两个不同元素。
问题求解分析(分治法):先给出无序序列数组a[low...high]。第一种情况为当数组中只有一个元素时,此时只存在一个最大值即为本身,次大值为负无穷,在这里我设置为-999999,第二种情况为数组中只有两个元素,此时最大值和次大值很显然将两个元素比较即可。第三种情况为数组中的元素大于两个,此时用分治法,将数组中元素砍为两半,像我们将香肠折半,注意的是此时中间的点归为前半部分,接着我们对前半部分再次进行判断三种情况,再对后半部分做同样的操作,因为我们每次判断返回的都是当前判断的一部分的最大值和次大值,因此折半后两边都有最大值和次大值,再将两边的四个值比较找出最大值和次大值。
代码如下:
import java.util.*;
public class Main {
static int a[];//存放数据的数组
static int inf=-999999;//自定义最小值
public static void main(String args[])
{
a=new int[5];
a[0]=4;a[1]=3;a[2]=5;a[3]=9;a[4]=1;//测试数据,可修改为键盘输入
max m=solve(0,4);//调用solve方法求出最大值和次大值
System.out.println(m.max1+" "+m.max2);//输出
}
static class max//自定义类(存放最大和次大值)
{
int max1;//最大值
int max2;//次大值
max(){};//构造函数
}
static max solve(int low,int high)//low和high为数组中的起始下标和终止下标
{
max mm=new max();//声明,因为每次寻找返回的最大值和次大值都要更新
if(low==high)//如果只有一个元素
{
mm.max1=a[low];//最大值为本身
mm.max2=inf;//次大值为inf
}
else if(low==high-1)//如果只有两个元素
{
mm.max1=Math.max(a[low], a[high]);//最大值为两个元素中的最大值
mm.max2=Math.min(a[low], a[high]);//最小值为两个元素中的最小值
}
else//大于两个元素
{
int mid=(low+high)/2;//设中间值为mid
max m1=solve(low,mid);//m1为前半部分的最大值和次大值(包括a[mid])
max m2=solve(mid+1,high);//m2为后半部分的最大值和次大值
if(m1.max1>m2.max1)//如果前半部分最大值大于后半部分最大值
{
mm.max1=m1.max1;//更新最大值为前半部分最大值
mm.max2=Math.max(m1.max2,m2.max1);//次大值为前半部分次大值与后半部分最大值的最大值
}
else
{
mm.max1=m2.max1;//更新最大值为后半部分最大值
mm.max2=Math.max(m2.max2, m1.max1);//次大值为后半部分次大值与前半部分最大值的最大值
}
}
return mm;//返回
} }
注意:每次调用solve方法时,都要初始化mm,因为这样才能使low和high更新时,mm中每次存放的为low~high的最大值和次大值;
空吧哇~
查找最大和次大元素(JAVA版)(分治法)的更多相关文章
- Java算法——分治法
一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简 ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- 排序算法大汇总 Java实现
一.插入类算法 排序算法的稳定性:两个大小相等的元素排序前后的相对位置不变.{31,32,2} 排序后{2,31,32},则称排序算法稳定 通用类: public class Common { pub ...
- 二分查找问题(Java版)
二分查找问题(Java版) 1.一般实现 package search; /** * @author lei 2011-8-17 */ public class BinarySearch ...
- 剑指offer:2.二维数组的查找(Java版)
备注:本文参照<剑指offer第二版> 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, 输入这样的一个二维数组和一个整数 ...
- 【Selenium-WebDriver问题篇】Selenium实现元素的拖拽(java版)(转)
https://blog.csdn.net/u010503127/article/details/51381284 Selenium实现元素的拖拽(java版) [前言] 自从淘宝网登陆页出现滑块验证 ...
- 如何用快排思想在O(n)内查找第K大元素--极客时间王争《数据结构和算法之美》
前言 半年前在极客时间订阅了王争的<数据结构和算法之美>,现在决定认真去看看.看到如何用快排思想在O(n)内查找第K大元素这一章节时发现王争对归并和快排的理解非常透彻,讲得也非常好,所以想 ...
- Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解
题目链接 https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/ 题目内容 设计一个找到数据流中第K大元素的类(class) ...
- Mysql 查找表中的多组前n大元素
博客已搬家,更多内容查看https://liangyongrui.github.io/ Mysql 查找表中的多组前n大元素 如果时单组很简单,只需要排序后去前n个就行了,但是多组排序似乎就不是那么好 ...
随机推荐
- Js 实现页面缩放
分享一个很棒的东西::::: 优点:不用考虑适配问题,按设计稿进行固定尺寸开发. 1.将下面这段 js 放在页面的<head>中 function bodyScale() { var de ...
- centos7 更改ip
http://blog.csdn.net/heimerdinger_feng/article/details/71171231 CentOS7在桥接模式下配置静态ip 原创 2017年05月04日 1 ...
- 时间戳 Date.parse()和dateObject.getTime()的区别
一. Date.parse() parse() 方法可解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数. 解析: 1.parse() 方法为Date 对象的静态方法,一般采 ...
- Tomcat 80端口被占用
1.“运行”中输入cmd2.在命令行中输入netstat -ano,得到端口号对应的PID 3.打开任务管理器,点击“查看“菜单,选择“选择列”,给进程列表中添加”PID“列,然后找到PID对应的进程 ...
- xdebug调试的原理
转自 https://segmentfault.com/a/1190000002528341 使用PhpStorm+xdebug单步调试程序可以快速帮助自己熟悉项目代码! 运行原理 在实际使用前,我们 ...
- jQuery.data() 即($.data())的实现方式
jQuery.data() 的作用是为普通对象或 DOM Element 附加(及获取)数据. 下面将分三个部分分析其实现方式: 1. 用name和value为对象附加数据:即传入三个 ...
- SpringBoot: 11.异常处理方式1(自定义异常页面)(转)
SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制.一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求.在 sprin ...
- CentOS 7下Cloudera Manager及CDH 6.0.1安装过程详解
目录 一.概念介绍 1.CDH 概览 2.Cloudera Manager 概览 二.环境准备 1.软件版本选择 2.节点准备(四个节点) 3.配置主机名和hosts解析(所有节点) 4.关闭防火墙 ...
- 从字节跳动离职后,拿到探探、趣头条、爱奇艺、小红书、15家公司的 offer【转】
前言 博主目前从事Android开发3年,前两年一直在抖音工作.我这篇文章并不是简单的描述一些面试中的题,或者总结一些Android的知识,而是想记录我整个的想法和准备的过程,以及一些心得体会,让大家 ...
- MongoDB可视化工具Studio 3T的使用
原文地址:https://blog.csdn.net/weixin_39999535/article/details/81383196 studio3T 永久使用方法 新建文件studio3t.bat ...