阿里巴巴在线测试题

本文介绍了阿里巴巴的一道面试题,即小猴子摘桃子问题。详细阐述了如何计算每棵树的权重,以及如何根据权重进行摘取决策。通过排序算法和折半查找实现解决方案,并提供了完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天做了一个阿里巴巴关于小猴子摘桃子的问题,现在我整理一下我的思路,希望各位大神给予指教。

1、根据每棵树的桃子的数量以及该树的位置,计算该树的权重,计算公式如下:

w=v*i

其中:v为每棵树的价值,i为每棵树的位置。

v是根据每棵树桃子的数量排序计算出来的。

2、权重计算出来后,将权重进行排序;

3、首先从权重最大的进行摘取,然后接着比较剩余的树,如果该树的价值大于当前的价值,并且该树的位置大于当前的位置,则摘取,否则不摘取。

通过以上思路的整理,代码如下:

public class Monkey {


public static void main(String[] args) {
int[] datas={10,4,5,12,8};
int[] flags=new int[5];
int[][] wights=comoute(datas);//计算权重
for(int i=0;i<wights.length;i++){
System.out.print("权重:"+wights[i][0]+", 价值: "+wights[i][1]+", 位置: "+wights[i][2]);
System.out.print("\n");
}


selPeach(wights,flags);
int count=0;
System.out.println("摘取的位置: ");
for(int i=0;i<flags.length;i++){
if(flags[i]==1){
count++;
System.out.println(i);
}
}
System.out.println("摘取总量:"+count);


}

/**
* 计算权重
* @param datas
* @return
*/
private static int[][] comoute(int[]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值