日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阿里巴巴在线测试题

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里巴巴在线测试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前幾天做了一個阿里巴巴關于小猴子摘桃子的問題,現在我整理一下我的思路,希望各位大神給予指教。

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[] datas){
int[] datasTemp=new int[datas.length];
for(int i=0;i<datas.length;i++){
datasTemp[i]=datas[i];
}
sort(datas,0,datas.length-1);
int[][] wights=new int[datas.length][3];
for(int i=0;i<datasTemp.length;i++){
int index=look(datas, datasTemp[i]);
wights[i][0]=(index+1)*(datasTemp.length-i);//通過樹的位置和價值計算權重
wights[i][1]=datasTemp[i];
wights[i][2]=i;
}

return wights;
}
/**
* 快速排序
* @param datas
* @param low
* @param high
* @return
*/
private static int[] sort(int[] datas, int low, int high){
int lo=low;
int hi=high;
if(lo<hi){
int key=datas[lo];
while(lo<hi){
while(datas[hi]<=key && lo<hi){
hi--;
}
datas[lo]=datas[hi];
while(datas[lo]>=key && lo<hi){
lo++;
}
datas[hi]=datas[lo];
}
datas[hi]=key;
sort(datas,low,hi-1);
sort(datas,hi+1,high);
}

return datas;
}
/**
* 折半查找
* @param datas
* @param key
* @return
*/
private static int look(int[] datas, int key){
int low=0;
int high=datas.length-1;
int mid=0;
while(low<=high){
mid=(low+high)/2;
if(datas[mid]>key){
low=mid+1;
}else if(datas[mid]<key){
high=mid-1;
}else{
break;
}
}
return mid;
}
/**
* 選擇樹
* @param wights
* @param flags
* @return
*/
private static int[] selPeach(int[][] wights, int[] flags){
sortrows(wights,0,wights.length-1,0);//將權重進行排序
System.out.println("################################");
for(int i=0;i<wights.length;i++){
System.out.print("權重:"+wights[i][0]+", 價值: "+wights[i][1]+", 位置: "+wights[i][2]);
System.out.print("\n");
}
int currentValue=wights[0][1];
int currentIndex=wights[0][2];
for(int i=0;i<wights.length;i++){
if(wights[i][1]>=currentValue && wights[i][2]>=currentIndex){
flags[wights[i][2]]=1;
currentValue=wights[i][1];
currentIndex=wights[i][2];
}
}
return flags;
}
/**
* 快速排序,并更新其他列
* @param wights
* @param low
* @param high
* @param col
* @return
*/
private static int[][] sortrows(int[][] wights, int low, int high, int col){
int lo=low;
int hi=high;
if(lo<hi){
int[] keys=new int[wights[0].length];
for(int i=0;i<wights[0].length;i++){
keys[i]=wights[lo][i];
}
while(lo<hi){
while(wights[hi][col]<=keys[col] && lo<hi){
hi--;
}
for(int i=0;i<wights[0].length;i++){
wights[lo][i]=wights[hi][i];
}
while(wights[lo][col]>=keys[col] && lo<hi){
lo++;
}
for(int i=0;i<wights[0].length;i++){
wights[hi][i]=wights[lo][i];
}
}
for(int i=0;i<wights[0].length;i++){
wights[hi][i]=keys[i];
}
sortrows(wights, low, hi-1, col);
sortrows(wights, hi+1, high, col);
}

return wights;
}


}

總結

以上是生活随笔為你收集整理的阿里巴巴在线测试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。