计算一组数字中最小的若干个数字(Java数组和栈实现)

简介: 本文目录1. 问题2. 思路2.1 思路12.2 思路22.3 思路33. 实现

1. 问题

如果有若干个数字,输入其中所有最小的数字。


例如,输入1 2 3 1 2 1 4 5,则输出1 1 1


2. 思路

2.1 思路1

最简单的思路是排序,按从小到大排序后,第一个就是最小的数字,然后从第一个往后遍历,等于最小数字的输出即可。但是这种方案需要两层循环,时间复杂度是O(n^2),应该寻求更快的方案。


2.2 思路2

想一下人如果去干这件事怎么实现,首先是找到最小的值,然后找与最小值相同的数字即可,这种需要从头到尾扫描数字两遍。


2.3 思路3

还有更快的方案,我只扫描所有数字一遍,把第一个数字当做最小,后面只把小于等于当前数字的记下来。这样我记下来的最后一个数字必然是最小的,然后从后往前看跟最小的数字相同的输出即可。


3. 实现

可以用数组实现,也可以用栈实现。因为输出是从后往前输出,正好符合栈后进先出的特点。代码如下:

/**
 * 获取最小的若干数字
 * @author maoge
 * @date 2019-02-27
 */
public class GetMinNum {
  /**
   * 入口
   */
  public static void main(String[] args) {
    int[] input = { 1, 2, 3, 1, 2, 1, 4, 5 };
    System.out.println("====数组计算结果====");
    getMinNumByArray(input);
    System.out.println("");
    System.out.println("====栈计算结果====");
    getMinNumByStack(input);
    System.out.println("");
  }
  /**
   * 通过数组计算最小的几个数字
   */
  public static void getMinNumByArray(int[] input) {
    //定义用来输出的数组
    int[] output = new int[input.length];
    //输出数组当前操作位置
    int location=0;
    output[location]=input[0];
    for (int i = 1; i < input.length; i++) {
      if (input[i] <= output[location]) {
        location++;
        output[location]=input[i];
      }
      i++;
    }
    //打印结果
    for(int j=location;j>=0;j--) {
      //output[location]是最小值
      if(output[location]==output[j]) {
        System.out.print(output[j]);
      }
    }
  }
  /**
   * 通过栈计算最小的几个数字
   */
  public static void getMinNumByStack(int[] input) {
    Stack<Integer> stack=new Stack<Integer>();
    int min=input[0];
    stack.push(min);
    //不大于最小的入栈
    for (int i = 1; i < input.length; i++) {
      if(input[i]<=min) {
        stack.push(input[i]);
      }
    }
    //栈顶元素就是最小的元素
    int peek=stack.peek();
    while(stack.isEmpty()==false) {
      int num=stack.pop();
      if(num==peek) {
        System.out.print(num);
      }
    }
  }
}
相关文章
|
1月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
|
30天前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
26 1
|
1月前
|
Java 索引
JAVA数组的常用方法
JAVA数组的常用方法
32 1
|
1月前
|
存储 设计模式 Java
Java 数组_方法_static关键字
Java 数组_方法_static关键字
|
1月前
|
Java
【Java】数组中的拷贝方法与初步理解深浅拷贝
【Java】数组中的拷贝方法与初步理解深浅拷贝
19 0
|
1月前
|
Java
java 数组添加元素的两种方法
java 数组添加元素的两种方法
107 0
|
10月前
|
Java
Java 数组中System.arraycopy()方法和System类中相关的其他方法的使用详解
Java 数组中System.arraycopy()方法和System类中相关的其他方法的使用详解
38 0
|
10月前
|
存储 Java 索引
2.1 Java一维数组操作技巧:数组的遍历方法比较
2.1 Java一维数组操作技巧:数组的遍历方法比较
114 0
|
存储 Java 索引
【Java编程进阶】花费数小时,带你学透Java数组,这些常用方法你还记得吗?
数组在 Java 编程中是一个非常基础且重要的概念,简单来说,就是把具有相同数据类型的数据存储在地址连续的内存空间中,目的是在程序设计中方便这一类数据的管理。每一个内容都有编号,这个编号从 0 开始,称为数组下标。数组分为一维数组和二维数组,还有一些和数组相关的重要内容,例如数组中元素的查找,排序等,下面做详细的讲解。
97 0
【Java编程进阶】花费数小时,带你学透Java数组,这些常用方法你还记得吗?
Java基础数组-元素暴力查找方法
Java基础数组-元素暴力查找方法
Java基础数组-元素暴力查找方法