算法练习:求最大值和最小值

本贴最后更新于 3074 天前,其中的信息可能已经时移世改

一个机器,每 1 秒会生成一个随机数。

机器需要提供另外一个方法,方法内容就是找出刚刚过去的 10 秒内,生成的数中的最大的数和最小的数。

请设计该机器内,用于计算最大值和最小值的数据结构。

语言要求:我只会 java、js 和 go,其他我都看不懂。

建议用 go,配合 playground 来演示。

  • 算法
    388 引用 • 254 回帖 • 22 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 周日选一个最佳答案,奖励积分😄

  • @DASHU 多少?

  • @Vanessa 那要看大 D 赞助多少😄 @88250

  • 88250

    @DASHU 500 怎么样

  • xixi

    把 10 秒内生成的数弄成一个数组,然后 Arrays.sorft(数组),最小取数组第 0,最大取数组最后一个。

  • never

    情景看来不需要算法,如果真需要算法的话,给你一个递推方程:
    f(n-10,n)=Max[f(n-10,n-1)+num[n],f(n-10,n-1)] (n>=10)

  • tomaer
    package com.dashu;
    
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.List;
    import java.util.PriorityQueue;
    import java.util.Queue;
    import java.util.Random;
    
    public class DaShu {
    
    
    static Comparator<Integer> cmp = new Comparator<Integer>() {
      public int compare(Integer e1, Integer e2) {
        return e2 - e1;
      }
    };
    static Queue<Integer> sortQueue = new PriorityQueue<Integer>(10,cmp);
    
    public static void main(String[] args) throws Exception {
    	while(true){
    		Thread.sleep(1000);
    		sortQueue.add(random());
    		if(sortQueue.size() == 10){
    			List<Integer> list = new ArrayList<Integer>();
    			for(int i = 0;i<sortQueue.size();i++){
    				if(i == 0){
    					System.out.println("Max :"+sortQueue.poll());
    				}
    				list.add(sortQueue.poll());
    			}
    			sortQueue.addAll(list);
    			System.out.println("Min: "+list.get(list.size() - 1));
    			System.out.println("------------------------------------");
    		}
    	}
    }
    
        public static int random(){
    	    int max=10000;
            int min=1;
    	    Random random = new Random();
    	   return random.nextInt(max)%(max-min+1) + min;
        }
    }
    

    代码已完成,没什么算法,就为了打非要算法人的脸。还有我的 500 奖励坐着到账

  • tomaer

    坐着等奖励到账

  • flhuoshan

    我来个可读性好点的,思路是使用固定长度(长度可自定义,按这里的要求设为 10 就可以)队列数据结构,先进先出。
    var code = "code"

    public interface Queue<T> {
    
    public void push(T t);
    
    public T poll();
    public int size();
    public T peak();
    public boolean isEmpty();
    public boolean isFull();
    }
    
  • flhuoshan
    var code="
    import java.util.ArrayList;
    

    import java.util.List;

    public class ArrayQueue implements Queue {
    List data;
    int capacity;

    public ArrayQueue(int capacity) {
    	data = new ArrayList<T>();
    	this.capacity = capacity;
    
    }
    
    public void push(T t) {
    
    	if (this.capacity == data.size()) {
    		data.remove(0);
    	}
    	data.add(t);
    }
    
    public T poll() {
    	T t = data.remove(0);
    	return t;
    }
    
    public int size() {
    	return data.size();
    }
    
    public T peak() {
    	return data.get(data.size() - 1);
    }
    
    public boolean isEmpty() {
    	return 0 == data.size();
    }
    
    public boolean isFull() {
    	return capacity == data.size();
    }
    
    public static void main(String[] args) {
    
    	ArrayQueue<Integer> queue = new ArrayQueue<Integer>(10);
    
    	for (int i = 0; i < 10; i++) {
    		queue.push(i);
    	}
    	System.out.println(queue.capacity);
    	System.out.println(queue.peak());
    	System.out.println(queue.poll());
    	queue.push(new Integer(11));
    
    	System.out.println(queue.data);
    }
    

    }

    "
    
  • flhuoshan

    调用及测试类
    var code =
    import java.util.List;

    public class Operation {

    public static void main(String[] args) {
    	ArrayQueue<Integer> queue = new ArrayQueue<Integer>(10);		
    	for(int i = 0 ;i< 10;i++){
    		queue.push(i);
    	}		
    	System.out.println(queue.capacity);
    	System.out.println(queue.peak());
    	System.out.println(queue.poll());
    	queue.push(new Integer(10));
    	queue.push(new Integer(11));		
    	queue.push(new Integer(12));	
    	queue.push(new Integer(13));	
    	queue.push(new Integer(14));	
    	queue.push(new Integer(15));	
    	System.out.println(queue.data);
    	System.out.println("最大值:"+Operation.max(queue.data));
    	System.out.println("最小值:"+Operation.min(queue.data));
    
    
    }
    
    public static int max(List<Integer> list){
    	int max = list.get(0);
    	for(Integer cur: list){
    		max = max <cur? cur:max;
    	}
    	return max;
    }
    
    public static int min(List<Integer> list){
    	
    	int min = list.get(0);
    	for(Integer cur: list){
    		min = min >cur? cur:min;
    	}
    	return min;
    }
    

    }

  • someone756

    💯

  • x4storm

    js 版本奉上

    var Data = {
            init: function() {
                this.interval(1000);
            },
            pool: [],
            maxCount: 10000,
            generate: function() {
                var num = Math.ceil(Math.random() * 10000);
                this.pool.push(num);
                if (this.pool.length > this.maxCount) {
                    this.pool.splice(0, this.pool.length - 10);
                }
            },
            interval: function(interTime) {
                var self = this;
                setInterval(function() {
                    self.generate();
                }, interTime);
            }
        }
    
        function getNum(count, Data) {
            var sets = Data.slice(Data.length - count, Data.length);
            console.log(sets);
            console.log("Max is : ", Math.max.apply(null, sets));
            console.log("Min is : ", Math.min.apply(null, sets));
        }
    
        Data.init();
    
        getNum(10, Data.pool);
    

    😄

  • x4storm

    markdown 不支持反引号引导的代码块。。。

    var Data = {
        init: function() {
            this.interval(1000);
        },
        pool: [],
        maxCount: 10000,
        holdCount: 100,
        generate: function() {
            var num = Math.ceil(Math.random() * 10000);
            this.pool.push(num);
            if (this.pool.length > this.maxCount) {
                this.pool.splice(0, this.pool.length - holdCount);
            }
        },
        interval: function(interTime) {
            var self = this;
            setInterval(function() {
                self.generate();
            }, interTime);
        }
    }
    
    function getNum(count, Data) {
    	var data=Data.pool;
        Data.holdCount=count;
        var sets = data.slice(data.length - count, data.length);
        console.log(sets);
        console.log("Max is : ", Math.max.apply(null, sets));
        console.log("Min is : ", Math.min.apply(null, sets));
    }
    
    Data.init();
    
    getNum(10, Data);
    

    😄

    在线演示地址
    http://runjs.cn/code/jj9athnv

  • 😄 好了,这一次算法练习,最佳答案是 @x4storm 童鞋提交的 JS 代码。

    另外还有两名童鞋也提交了代码,可惜没有实现功能。但是重在参与,也是会有奖励的。

    奖励列表:

    @x4storm +300 分

    @flhuoshan +100 分

    @tomaer +100 分

  • 还有我的答案。。。

  • crick77

    var foo = {
    max: null,
    min: null,
    timer: null,
    mainTimer: null,
    getMax: function() {
    return this.max;
    },
    getMin: function() {
    return this.min;
    },
    ctor: function(data) {
    this.max = data;
    this.min = data;
    },
    generate: function() {
    return parseInt(Math.random() * 100);
    },
    start: function() {
    //console.log('start');
    var tmp = foo.generate();
    this.max || this.ctor(tmp);
    this.max = tmp > this.max ? tmp : this.max;
    this.min = tmp < this.min ? tmp : this.min;
    //console.log(this.getMax());
    //console.log(this.getMin());
    this.timer = setTimeout(function() {
    foo.start()
    }, 1000);
    },
    run: function(vTime) {
    if (!this.timer) {
    foo.start();
    } else {
    console.log('max:' + foo.getMax());
    console.log('min:' + foo.getMin());
    }

        foo.ctor(foo.generate());
        var time = vTime || 10000;
        this.mainTimer = setTimeout(function() {
            foo.run(time);
        }, time);
    },
    stop: function() {
        window.clearTimeout(this.timer);
        window.clearTimeout(this.mainTimer);
    }
    

    }
    //foo.run(1000);
    foo.run();

  • crick77

    我去 我的格式怎么变成这样了 。。 这个怎么弄

  • x4storm

    谢谢大叔,没注意到数据结构。用 js 是偷懒了的,js 的数组原生就能实现队列,链表,栈的数据结构。:bowtie:

请输入回帖内容 ...
DASHU
大叔已经成为一个老油条了~~ 佛山

推荐标签 标签

  • gRpc
    10 引用 • 8 回帖 • 52 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 745 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 598 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 177 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 628 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 6 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    163 引用 • 1450 回帖 • 2 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖 • 1 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 199 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 640 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1398 回帖 • 1 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 1 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 2 关注
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1746 回帖 • 1 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 4 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    710 引用 • 1173 回帖 • 176 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    368 引用 • 1212 回帖 • 576 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 250 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    85 引用 • 895 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 629 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    21 引用 • 22 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    261 引用 • 662 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 243 关注