每日一记--2014.9.15

今天的程序还有待改进,写的可能比较冗长了,虽然逻辑不难,自己也是debug了一会儿。

问题是:找数值中的主元素,即个数超过半数的元素。

首先找出唯一的一个候选元素,然后再遍历数值统计其个数,看是否大于数组长度的二分之一,如大于则返回此主元素,若小于则表明没有主元素那么返回-1(假设数组中的数均为正整数)。

如何寻找唯一的候选元素:

1.利用递归

2.为找出A中的候选元,先构造B。逐次比较A中的两个元素:比较A1和A2,若相等,则放入B;否则什么也不做。然后比较A3和A4,若相等,则放入B;否则什么也不做。依次方式继续直到读完整个A(当A中有奇数个元素时,则将最后一个元素直接放入B中)然后寻找B中的候选元素。一直递归下去,直到B中只剩一个候选元素为止,或者B中元素为0个,则证明没有主元素。

 1 package mainElement;
 2
 3 public class MainElement {
 4
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         int[] aa = new int[] {5,2,3,5,5,5,1,7,5,9,5};
 8         System.out.println(findMain(aa,aa.length));
 9     }
10
11     private static int findMain(int[] aa, int length) {
12         int mainEle = findMainCandi(aa,length);
13         if(mainEle!=-1){
14             int count=0;
15             for(int i=0;i<length;i++){
16                 if(aa[i]==mainEle)
17                     count++;
18             }
19             if(count>(length/2)){
20                 return mainEle;
21             }else{
22                 return -1;
23             }
24
25         }else{
26             return -1;
27         }
28
29     }
30
31     // 如果有候选主元素就返回此候选,如没有返回-1
32
33     private static int findMainCandi(int[] aa,int len) {
34         // TODO Auto-generated method stub
35        if (len == 1) {
36             return aa[0];
37         } else {
38             int length =0;
39             int[] bb = new int[len];
40             if (len % 2 == 0) {
41                 int j=0;
42                 for (int i = 0; i < len; i = i + 2) {
43                     if (aa[i] == aa[i + 1])
44                         bb[j++] = aa[i];
45                 }
46                 if(j==0)
47                     return -1;
48                 else
49                     length=j;
50             } else {
51                 int j=0;
52                 for (int i = 0; i < len - 1; i = i + 2) {
53                     if (aa[i] == aa[i + 1])
54                         bb[j++] = aa[i];
55                 }
56                 bb[j] = aa[len - 1];
57                 length=j+1;
58             }
59             return findMain(bb,length);
60         }
61     }
62 }
时间: 2024-10-07 08:36:23

每日一记--2014.9.15的相关文章

每日一记--2014.9.22

说好的每日一记呢, 哎,上周接到了老师的任务,要把项目中的后台数据处理代码读懂,于是就没有时间每天搞段小代码来写写了. 但是通过这一周,自己也学到了不少东西. 1. 首先是如何读别人写的代码: 先看 improt 大概用到什么类: 然后看main,有什么变量的初始化(有的写在一个init函数里了): 找到核心类,核心函数(调用了其他函数的函数),看其实现主要功能流程 . 最后再看其他那些被调用的函数,它们的具体实现细节. 2. 其次是如何给别人讲代码,做code review: 先讲其实现的功能

每日一记--2014.9.13

今天贴三个小程序,程序很小,但是希望这些小东西都能记在心里 1.求多项式 1 package 多项式; 2 3 public class Polynomial { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 int[] xishu = new int[]{2,1,0,8,4}; 8 System.out.println(poly(xishu,3)); 9 10 } 11 p

每日一记--2014.9.12

今天是整数随机置换 还有记住:java中的基本数据类型是传递值的而不是传递引用的 1 package 随机置换; 2 import java.util.*; 3 4 //生成前N个整数的随机置换 5 //先顺序填满整个数组,然后挨个和前面的随机任取的位置交换 6 7 public class RandomExchange { 8 9 public static void main(String[] args) { 10 // TODO Auto-generated method stub 11

每日一记--2014.9.14

今天的小程序是厄拉多塞筛--寻找小于整数N的所有素数 厄拉多塞筛的基本思想是:从最小的素数2开始,首先把2圈出,然后将2的倍数去除.找出下一个未被圈出的数3,将3的倍数去除.找出下一个未被圈出的数35,将5的倍数去除,以此类推,直到N的平方根为止,就不需将其倍数去除了.最后剩余的被圈出的数就是要找的素数. 1 package 判断素数; 2 3 import java.util.ArrayList; 4 5 public class Shai { 6 public static void mai

每日一记--2014.10.11(2)

今天终于进展到了第三章,好好读了读链表 其实对于linkedlist来说,它的remove也会是O(N),因为对于删除这个动作确实是常数时间的,但是对于定位到被删除元素的位置就需要有线性时间的开销了 今天参照书上的把ArrayList类编了编,定名为MyArrayListM 1 package myarraylist; 2 3 import java.util.Iterator; 4 import java.util.NoSuchElementException; 5 6 public clas

每日一记:邮件服务器:Postfix

邮件服务器:Postfixmail server与DNS的关系:1.架设mail server 必须要有合法的主机名2.DNS的反解也很重要要架设一部mail server,务必向上层ISP申请IP反解的对应,不要使用预设的反解主机名,否则会是你的邮件服务器发出的信件被视为垃圾信件不申请IP的反解,则可利用relayhost或者是smarthost来处理邮件传递的问题,也涉及到上层ISP的问题3.需要DNS的MX及A标准:先传送给带MAX标志的邮件主机,如果没有再传给带A标志的主机:MAX标志的

2014 5 15

今天   去报名那个啥子辅修专业了,报的是复旦大学的金融学,他们好多都说这个辅修没多大用处,而且很水,我只想说呵呵..因为我看到了一个职业是金融软件工程师,然后个人对金融这块还比较感兴趣,学的什么国际金融,还有证卷什么的,感觉高大上啊! 无所谓,个人觉得还行,啥子认真学都好吧,关键是现在的大时代下,我要强大自己,感觉学金融结合计算机,以后好些! 今天中午我收到短信,关于明天对毕业生寄语的拍摄,瞬间有了各大部长的电话,挨着挨着发短信.苦逼吧.. 晚上么有啥子纠结,吃完饭,来了一杯大大的奶昔,吃的哥

每日一记:搭建Memcached + php 缓存系统

服务器环境,Centos6.5 1.安装Memcached服务端 Yum -y install memcached 2.配置Memcached服务端用户以及自动启动服务等 将服务配置成自启动 chkconfig --level 2345 memcached on 3.配置配置文件 vi /etc/sysconfig/memcached PORT=”11211″ 端口  USER=”root” 使用的用户名  MAXCONN=”1024″ 同时最大连接数 CACHESIZE=”64″ 使用的内存大

每天学点linux (更新:2014.08.15)

1.shell脚本如何debug? 第一次写了300行的shell脚本,这么一大坨怎么debug呀?难道一块一块拿出来测试吗? [[email protected] ~]# sh [-nvx] scripts.sh 选项与参数: -n :不要运行 script,仅查询语法的问题: -v :再运行 sccript 前,先将 scripts 的内容输出到萤幕上: -x :将使用到的 script 内容显示到萤幕上,这是很有用的参数! 参考:http://vbird.dic.ksu.edu.tw/li