计算一组数字中最小的若干个数字(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);
      }
    }
  }
}
相关文章
|
7月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
116 1
|
2月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
43 2
|
4月前
|
Java 索引
Java系列 之 Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan
这篇文章介绍了Java中数组复制的四种方法:`Arrays.copyOf()`、`Arrays.copyOfRange()`、`System.arraycopy()`和`clone()`方法,以及它们的使用场景和示例代码。
|
5月前
|
存储 Java 容器
Java数组的初始化方法
Java数组的初始化方法
|
7月前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
80 1
|
7月前
|
Java 索引
JAVA数组的常用方法
JAVA数组的常用方法
93 1
|
7月前
|
存储 设计模式 Java
Java 数组_方法_static关键字
Java 数组_方法_static关键字
|
7月前
|
Java
【Java】数组中的拷贝方法与初步理解深浅拷贝
【Java】数组中的拷贝方法与初步理解深浅拷贝
42 0
|
7月前
|
Java
java 数组添加元素的两种方法
java 数组添加元素的两种方法
227 0
|
Java
Java 数组中System.arraycopy()方法和System类中相关的其他方法的使用详解
Java 数组中System.arraycopy()方法和System类中相关的其他方法的使用详解
69 0