簡體   English   中英

找到數組中最小的正數

[英]find smallest positive number in an array

所以......我有:int array [] = {-8,2,0,5,-3,6,0,9};

我想找到最小的正數(在上面的列表中是2)

這就是我在做的事情:


int array[] = {-8,2,0,5,-3,6,0,9};

int smallest=0;


        for(int i=0;i<array.length;i++) // Find the first number in array>0 (as initial           
                                         // value for int smallest)
        {
            if(array[i]>0)
            {
                smallest=array[i]; 
                break;// Break out of loop, when you find the first number >0
            }   
        }


        for(int i=0;i<array.length;i++) // Loop to find the smallest number in array[]
        {

            if(smallest>array[i]&&array[i]>0)
            {
                smallest=array[i];

            }

        }

        System.out.println(smallest);

        }

我的問題是:

我們可以減少步驟數嗎? 是否有更聰明/更短的方式,沒有其他數據結構。

謝謝。

這有更聰明/更短的方式嗎?

如果你想要更短,使用Java 8,你可以使用一個int流:

int min = Arrays.stream(array).filter(i -> i >= 0).min().orElse(0);

(假設你對數組為空時的最小值為0感到滿意)。

沒有任何prioe知識,沒有辦法避免迭代整個數組。

但是,您可以確保通過刪除第一個循環僅迭代一次,而只是分配smallest = Integer.MAX_VALUE 您還可以添加一個布爾值,指示數組已更改以區分沒有正整數的情況,以及唯一正整數為Integer.MAX_VALUE

您不需要具有smallest=array[i] ,只需使用INTEGER.MAX_VALUEarray[0]初始化變量,並迭代數組,將值與此變量進行比較。

這是在O(n)時間O(1)空間中實現的 ,這是你能得到的最好的! :)

一種更簡單的方法

 int[] array ={-1, 2, 1};
 boolean max_val_present = false;  

 int min = Integer.MAX_VALUE;

 for(int i=0;i<array.length;i++) // Loop to find the smallest number in array[]
 {
      if(min > array[i] && array[i] > 0)
         min=array[i];
      //Edge Case, if all numbers are negative and a MAX value is present
      if(array[i] == Integer.MAX_VALUE)
        max_val_present = true;
 }

 if(min == Integer.MAX_VALUE && !max_val_present) 
 //no positive value found and Integer.MAX_VALUE 
 //is also not present, return -1 as indicator
    return -1; 

 return min; //return min positive if -1 is not returned

為此,您不需要兩個循環。

int smallest = Integer.MAX_VALUE; 

for(int i=0;i<array.length;i++) {
    if(array[i] > 0 && smallest > array[i])
    {
        smallest = array[i]; 
    }  
} 

此代碼的唯一問題是在循環之后,您無法知道所有元素是否為非正數或至少其中一個是Integer.MAX_INT且剩余是非正數。 如果您認為可能出現這種情況,則應添加控件。

給你的樣品:

    int array[] = {-8,2,0,5,-3,6,0,9};
    int minPosNum = Integer.MAX_VALUE;
    for (int i = 0; i < array.length; i++) {
        if(array[i] > 0 && array[i] < minPosNum){
            minPosNum = array[i];
        }
    }
    System.out.println(minPosNum);
int array[] = {-8,2,0,5,-3,6,0,9};
int minPos = Integer.MAX_VALUE;

for (int number : array) {
    if (number > 0)
        minPos = Math.min(number, minPos);
}

您可以嘗試使用1循環執行此操作:

int array[] = {8,2,0,5,-3,6,0,9};
int smallestPositive = array[0];

for(int i = 1; i < array.length; i++){
    if(smallestPositive > 0){
        if(array[i] < smallestPositive && array[i] > 0)
            smallestPositive = array[i];
    }else
        smallestPositive = array[i];
}

System.out.println(smallestPositive); 將打印2

您可以嘗試以下代碼

import java.util.*;
public class SmallItem 
{
    public static void main(String args[])
    {
       int array[] = {-8,2,0,5,-3,6,0,9};
       int number = Integer.MAX_VALUE;
       ArrayList al = new ArrayList();

       //Here we add all positive items into a ArrayList al
       for(int i=1;i<array.length;i++){
           if(array[i]>0){
               al.add(new Integer(array[i]));
           }
       }

       Iterator it = al.iterator();
       while(it.hasNext()){
           int n = ((Integer)it.next()).intValue();
           if(n<number){
               number = n;
            }
        }
       System.out.println("Smallest number : " + number);
    }
}

對於C ++

int smallest (int array[]){
    int a;
    for(int i=0;i<n;i++){
        if(array[i]>0){
            a=array[i];
            break;
        }
    }

    for (int i=0; i<n; i++){
        if(array[i]<=a && array[i]>0){

            a=array[i];
        }
    }

    return a;
}

在JavaScript中

var inputArray = [-1,2,1,5,-20];
var arrayWithOnlyPositiveValue = [];

    for(var i=0;i<inputArray.length;i++){

        if(inputArray[i]>=0){
            arrayWithOnlyPositiveValue.push(inputArray[i])
            }

    }

    var min_of_array = Math.min.apply(Math, arrayWithOnlyPositiveValue);
    console.log('---smallestPositiveValue----',min_of_array);
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = { -1, 2, 1, -2, 11, 23, 44 };
            int min = MinArray(array);
            Console.WriteLine(min.ToString() + " is the minimum number!");
            Console.ReadKey();
        }
        public static int MinArray(int[] array)
        {
            int minimumNumber = Int32.MaxValue;
            foreach (int i in array)
            {
                if (i < minimumNumber && i > 0)
                {
                    minimumNumber = i;
                }

            }

            return minimumNumber;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM