我有两个数组,一个非常大(超过百万个条目)而其他数组很小(少于1000个条目),在数组中查找所有条目的最大数量的最佳方法是什么?
感谢。
答案 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