• 软件工程—个人作业(7.1)


    三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    设计思想:首先拿到这个问题,我们应该怎么找到突破口,按照软件工程的分解之道,复杂问题简单化,简单问题逻辑化。这里把这个问题抽象一下,就变成了一个找众数的问题。既然是找众数,那么按照我们以往最笨的方式把它实现就是统计每一个数出现的频率,然后比较频率,得出频率最多的那个数就是众数。那么我们要想简化算法,我们就反复读读前提条件,里面有个关键语句:该“水王”发帖数目超过了帖子数目的一半。那么以这个为突破口,我们可以设想,如果让水王的帖子和其他人的帖子一比一抵消,那么剩下来的还是水王的帖子,这样子我们就找到了水王。

    代码实现:

    最笨的办法:

    package main;
    public class zs {
    public static void main(String[] args)
    {
        int[] a= {1,2,1,1,1,22,3,1,1,1};
        candidate(a);
    }
        public static void candidate (int[] array)    // 找出数组中出现次数最多的那个数
        {
            int[] count = new int[101];                // 计数数组,每个元素的默认值为0
            for(int i = 0; i < array.length; i++)
            {
                count[array[i]]++;                    // 对应的计数值加1
            }
            int maxCount = count[0];
            int maxNumber = 0;
            for(int i = 1; i < 100; i++)            // 找出最多出现的次数
            {
                if(count[i] > maxCount)
                    maxCount = count[i];
            }
            for(int i = 0; i < 100; i++)            // 找出出现最多次的那个数字
            {
                if(count[i] == maxCount)
                    maxNumber = i;
            }
            System.out.println("出现次数最多的数字为:" + maxNumber);
            System.out.println("该数字一共出现" + maxCount + "次");
        }
    }

    简便方法:

    package main;
    
    public class zs2
    {
        public static void main(String[] args)
        {
            int[] a =
            { 1, 2, 3, 4, 1, 1, 1, 2, 2, 3, 4, 51, 1 };
            int count = 1;
            int max = a[0];
            for (int i = 1; i < a.length; i++)
            {
                if (max == a[i])
                {
                    count++;
                } else
                {
                    count--;
                    if (count == 0)
                    {
                        max = a[i + 1];
                    }
                }
    
            }
            System.out.println(max);
        }
    }

    实现截图:

    1.

    2.

    个人总结:

    通过这次小练习,开阔了自己的思路,但是也深感自己在数据结构和算法方面的不足,革命尚未成功,同志任需努力

  • 相关阅读:
    使用npm安装一些包失败了的看过来(npm国内镜像介绍)(解决生成空的abp模板项目一直卡在还原cpm包中)
    .NET CORE 发布到IIS问题 HTTP ERROR 500.30
    .NET Core默认不支持GB2312,使用Encoding.GetEncoding(“GB2312”)的时候会抛出异常。
    .net c# 文件分片/断点续传之下载--客户端
    aspnetcore 实现断点续传
    C# 反射获取属性值、名称、类型以及集合的属性值、类型名称
    C# 3Des两种加密方式 (对应java中的desede/CBC/PKCS5Padding加密)
    Asp.NetCore3.1中多次读取Request.Body
    ASP.NET Core 2.0系列学习笔记-DI依赖注入
    C# Newtonsoft.Json JObject合并对象整理
  • 原文地址:https://www.cnblogs.com/quxiangjia/p/11067684.html
Copyright © 2020-2023  润新知