Ex 2_23 如果一个数组超过半数的元素都相同时,该数组被称为含有一个主元素..._第二次作业


将数组A划分为两个数组A1和A2 ,各含有A的一半元素或一半多一个.若A中含有主元素x,则A1和A2中至少有一个数组含有主元素x,对A1和A2递归地计算有无主元素,若A只含有一个元素,则A的主元素就是这个元素,否则计算出A1和A2的主元素x1和x2:
若x1和x2都不存在,则A不存在主元素
若x1和x2有一个存在,则检查这个元素是否为A的主元素
若x1和x2都存在且不相等,则分别检查这个元素是否为A的主元素
若x1和x2都存在且相等,则这个元素就是A的,主元素
package org.xiu68.ch02.ex2;
public class Ex2_23a {
public static void main(String[] args) {
//n个元素的数组,相同元素个数大于一半称为主元素,元素之间不能比较大小,可以作相等比较
//以O(nlogn)时间确定数组是否含有主元素
//String[] strs=new String[MAX_LENGTH];
String[] strs2=new String[]{"aa","bb","cc","aa","aa","bb","cc","aa","aa"};
Sal s2=countPrime(strs2,0,strs2.length-1);
if(s2!=null)
System.out.println(s2);
}
//求数组中p到q间的主元素
public static Sal countPrime(String[] strArr,int p,int q){
//如果只有一个元素,这个元素就是主元素
if(p==q)
return new Sal(strArr[p],1);
int partLength=q-p+1; //元素个数
int middle=p+partLength/2; //元素中间位置
Sal first=countPrime(strArr,p,middle-1); //前一部分的主元素
Sal second=countPrime(strArr,middle,q); //后一部分的主元素
//前半部分和后半部分都没有主元素,则没有主元素
if(first==null && second==null)
return null;
//后半部分有主元素,则遍历数组确定后半部分的主元素是否为前后两部分的主元素
if(first==null && second!=null)
return countPart(strArr,partLength, p, middle-1, second.getStr(), second.getCount());
//前半部分有主元素,则遍历数组确定前半部分的主元素是否为前后两部分的主元素
if(first!=null && second==null)
return countPart(strArr,partLength, middle, q, first.getStr(), first.getCount());
//前后两部分都有主元素
if(first!=null && second!=null){
//若主元素相同,则这个元素就是整个部分的主元素
if(first.getStr().equals(second.getStr()))
return new Sal(first.getStr(),first.getCount()+second.getCount());
else{
//主元素不相同,则分别计算前后两部分的主元素是否为整个部分的主元素
Sal temp=countPart(strArr,partLength, p, middle-1, second.getStr(), second.getCount());
if(temp!=null)
return temp;
return countPart(strArr,partLength, middle, q, first.getStr(), first.getCount());
}
}
return null;
}
//计算某个元素是否为某一部分的主元素
public static Sal countPart(String[] strArr,int partLength,int p,int q,String k,int firstNum){
int lastNum=0;
for(int i=p;i<=q;i++){
if(strArr[i].equals(k))
lastNum++;
}
int finalNum=firstNum+lastNum;
if(finalNum>(partLength/2))
return new Sal(k,finalNum);
return null;
}
}
class Sal{
private String str; //主元素
private int count; //主元素个数
public Sal(){}
public Sal(String str, int count) {
super();
this.str = str;
this.count = count;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String toString(){
return "主元素:"+this.getStr()+",个数"+this.getCount();
}
}
Ex 2_23 如果一个数组超过半数的元素都相同时,该数组被称为含有一个主元素..._第二次作业的更多相关文章
- Ex 2_16 给定一个无穷数组..._第二次作业
先比较数组的A[0]元素,若不相等接下来比较A[1],A[2],A[4],A[8]…,若找到一个区间A[2n-1]<x<A[2n],再对这个区间进行折半查找操作.总的时间为O(logn). ...
- 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。
有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. 当前数组a和数组b的和之差为 A = sum(a) - ...
- 有两个数组a,b,大小都为n;通过交换a,b中的元素,使sum(a)-sum(b)最小。
今天在浏览网页的时候,发现了一个叫做 华为面试题(8分钟写出代码) 的链接,不确定真实性,纯属好奇,就点进去看看 这个可能是很老的题目吧,因为我看到这题目时,底下有好多评论了.提到XX排序,内存占用 ...
- Ex 2_14 去掉数组中所有重复的元素..._第二次作业
首先利用归并排序算法对数组进行排序,时间复杂度为O(nlogn),接着再利用时间复杂度为O(n) 的去重复算法去掉数组中的重复元素.总的时间复杂度为O(nlogn). (这题应该用分支算法解决)以下为 ...
- 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10 ...
- JavaScript利用数组原型,添加方法实现遍历多维数组每一个元素
原型就是提供给我们为了让我们扩展更多功能的. 今天学习了用js模拟底层代码,实现数组多维的遍历.思想是在数组原型上添加一个方法. // js中的数组forEach方法,传入回掉函数 能够帮助我们遍历数 ...
- 编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类
图 1 一.从图1发现了什么问题呢? 答案:1.参数传的的太多了:2.另外注释也没写好. 说明:一个方法中,传参数的数量最好不要超过5个. 应该采用:struct或class,或一个字典类都行.其中 ...
- 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素
/** * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 能够假定数组元素原先是按从小到大的顺序排列的. */ /** * 思路:数组 ...
- java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
package com.swift; import java.util.Arrays; import java.util.Comparator; public class ArrayThread_Te ...
随机推荐
- j2ee应用开发调试工具
j2ee应用程序不能独立运行,需要运行在一个servlet/jsp容器中,常用的servlet/jsp容器如:tomcat,jetty等.在开发调试j2ee程序时,也需要部署在一个指定的容器中.如果每 ...
- SpringBoot系列: 使用 flyway 管理数据库版本
Flyway 和 Liquibase 都是 Java 项目中常用的 DB migration 工具, 从使用简便性看,Flyway 比 Liquibase 更简单, 从 github 的 star ...
- 10个免费的javascript富文本编辑器(jQuery and non-jQuery)
祝愿园子里的朋友圣诞节快乐. 本文介绍了10个免费易用富文本编辑器(rich text editors,RTE),其中5个是Jquery插件,另外5个是非Jquery富文本编辑器 简介 Javascr ...
- 【刷题记录】BZOJ-USACO
接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...
- 002_Add Two Numbers
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # sel ...
- java使用类数组 报错Exception in thread "main" java.lang.NullPointerException
源代码如下: Point[] points=new Point[n];//Point是一个类 for(int i=0;i<n;i++) { System.out.print("请输入x ...
- Linux下NAT模式和桥接模式的网络配置
Linux下NAT模式和桥接模式的网络配置 最近在配置linux虚拟机的时候发现有很多坑,现在记录下来以防日后又跳到坑里. 我的运行环境是:主机 windows 7 虚拟机 Virtualb ...
- ASP.NET EF 延迟加载,导航属性延迟加载
ASP.NET EF 延迟加载,导航属性延迟加载 EF(EntityFramework)原理:属于ORM的一种实现 通过edmx文件来查看三部分:概念模型,数据模型,映射关系,上下文DbConte ...
- 【转载】java abstract class和interface的区别
转载:https://blog.csdn.net/b271737818/article/details/3950245 在Java语言中,abstract class和interface是支持抽象类定 ...
- 2017-2018-2 165X 『Java程序设计』课程 团队项目备选题目
2017-2018-2 165X 『Java程序设计』课程 团队项目备选题目 结合本课程时间安排,以及同学们的专业和课程内容,制定了以下六个题目供各小组选择.如有其他项目方案设想,可自行与老师沟通.老 ...