在数组中查找最大整数?

时间:2009-08-29 03:21:07

标签: algorithm arrays

我有两个数组,一个非常大(超过百万个条目)而其他数组很小(少于1000个条目),在数组中查找所有条目的最大数量的最佳方法是什么?

感谢。

9 个答案:

答案 0 :(得分:15)

如果数组未排序,则必须执行线性搜索以找到每个数组中的最大值。如果数组 排序,那么只需从每个数组中取出第一个或最后一个元素(取决于排序顺序)。

答案 1 :(得分:5)

如果您考虑一下,如果要查找最高值,则必须检查所有值。没有办法解决这个问题(除非对数组进行排序,这很简单 - 只需要取每个数组的最后一个(或者首先排序),然后选择最大的数组。例如:

int highest = array1[i]; // note: don't do this if the array could be empty
for(int i = 0; i < array1.length; i++) {
    if(highest<array1[i]) highest = array1[i];
}
for(int i = 0; i < array2.length; i++) {
    if(highest<array2[i]) highest = array2[i];
}  
// highest is now the highest

答案 2 :(得分:4)

如果你的数组已经排序,你可以跳到最后一个。

如果您的数组没有排序,则必须遍历整个列表,跟踪到目前为止看到的最大值。

答案 3 :(得分:1)

这里我给出了从int数组中查找Maximum值的简单代码。 我的逻辑是: - 数组是int [] arr = {8,5,6,7,3,4,9}。先拿一个临时变量放第一个 该变量中的值并假设这是最大值,即tempValue = arr [0]。在for循环中取一个if块并检查第二个值是否大于first。同样,如果block将自动检查其余值。最后,最大值将在临时变量中分配并获得结果给定数组中的最大值为9.

公共类MaxIntArray {

  public static void main(String[] args){


    int[] arr={8,5,6,7,3,4,9};

    int tempValue=arr[0];

    for(int i=0;i<arr.length;i++){
        if(arr[i]>tempValue){
            tempValue=arr[i];
        }

    }
    System.out.println("\n Maximum Value in the Given Array = "+tempValue);

 }

}

输出为: - 给定数组中的最大值= 9

答案 4 :(得分:0)

我们可以减少您的操作次数或比较为3(n / 2-2)。来自2n(n代表使用线性搜索找到最大数字,n代表最小值)。假设我们有一系列元素[1,9,8,7,4,5,1,4,7,8,1,6]。 将第一个元素设置为Max = 1,将下一个元素设置为Min = 9,现在同时接下来的两个元素元素将它们进行比较,然后与Max和Min进行比较。因此,一次迭代只需要3次比较,但数组减少到n / 2。因此,比较总数将是3(n / 2-2)。 例如:

Max=arr[1];

Min=arr[2];

for(int i=3; i< arr.length;i=i+2)

{

if(arr[i]>arr[i+1]) 

{

if(Max < arr[i])

Max=arr[i];

if(Min > arr[i+1])

Min=arr[i+1];

}

else 

{

if(Max < arr[i+1])

Max=arr[i+1];

if(Min > arr[i])

Min=arr[i];

}

}

答案 5 :(得分:0)

对于未排序的数组,您可以使用值0初始化最大数字变量(假设数组由正值组成),然后迭代数组中的所有项目,在每次迭代时将较大的数字分配给最大变量。

    int[] values = {8,3,7,10,5};
    max = 0; 
    for(int i = 0;i < values.length;i++){
     if(values[i] > max){
        max = values[i];
       }
    }
    System.out.println(max);

答案 6 :(得分:0)

减少以找到最高编号:

此示例使用Swift。

let max: UInt8 = [1,4,3].compactMap { $0 }.reduce(UInt8(0)) { $0 > $1 ? $0 : $1 } // 4

答案 7 :(得分:0)

这个解决方案是当你有一个对象数组,你希望从中找到一个属性的最大值。

在这里,我们有一系列工作(有各自的利润和截止日期),我们需要找到最有利可图的工作。

class Job
{
    int deadline; int profit;
    
    public Job(int deadline, int profit)
    {
        this.profit = profit;
        this.deadline = deadline;
    }
    
    
    public int getDeadline()
    {
        return deadline;
    }
    
    public int getProfit()
    {
        return profit;
    }
    
    public String toString()
    {
        return "Job [deadline:"+this.deadline+" profit:"+this.profit+"]";
    }
}

找到最赚钱的工作的方法。

static int jobSequenceWithMaxProfit(Job[] jobsAndProfits)
    {
        List<Job> lst= Arrays.asList(jobsAndProfits);
        int maxProfit= Collections.max(lst, (Job a1, Job a2)->{ return a1.getProfit()- a2.getProfit();}).getProfit();
        
        return maxProfit;
    }

答案 8 :(得分:-1)

这里我给出了从int数组中查找Maximum值的简单代码。我的逻辑是: - 数组是int [] arr = {8,5,6,7,3,4,9}。首先取一个临时变量并将第一个值放在该变量中并假设这是最大值,即tempValue = arr [0]。在for循环中取一个if块并检查第二个值是否大于first。同样,如果block将自动检查其余值。最后,最大值将在临时变量中分配并获得结果给定数组中的最大值为9.

公共类MaxIntArray {

 public static void main(String[] args){


    int[] arr={8,5,6,7,3,4,9};

    int tempValue=arr[0];

    for(int i=0;i<arr.length;i++){
       if(arr[i]>tempValue){
        tempValue=arr[i];
       }

   }
   System.out.println("\n Maximum Value in the Given Array = "+tempValue);

}

}

//输出为: - 给定数组中的最大值= 9