亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一道算法,沒想明白,幫忙看下

一道算法,沒想明白,幫忙看下

冉冉說 2019-05-23 17:18:34
一個不定長數組下標0值為1下標2和3值為null,下標4值為5現在需要將null值替換最近的不為null的值比如{1,2,null,null,5,6,null};替換為{1,2,2,5,5,6,6};我使用的最暴力的遍歷循環做的,但這樣不是最優的看上去應該是用二分查找來,但沒想明白改怎么來?幫忙指點下
查看完整描述

2 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

publicclassLatestInteger{
publicstaticvoidmain(String[]args){
Integer[]source={1,2,null,null,5,6,null};
Integer[]left=newInteger[source.length];
Integer[]right=newInteger[source.length];
processLeft(source,left);
processRight(source,right);
Arrays.stream(left).forEach(item->System.out.print(item+""));
System.out.println("-------------------");
Arrays.stream(right).forEach(item->System.out.print(item+""));
//System.exit(0);
for(inti=0;iif(source[i]==null){
intleftDistance=(left[i]==-1?Integer.MAX_VALUE:(i-left[i]));
intrightDistance=(right[i]==-1?Integer.MAX_VALUE:(right[i]-i));
source[i]=(leftDistance}
}
System.out.println("-------------------");
Arrays.stream(source).forEach(item->System.out.print(item+""));
}
privatestaticvoidprocessLeft(Integer[]source,Integer[]left){
left[0]=(source[0]==null?-1:0);
for(inti=1;ileft[i]=(source[i]==null?left[i-1]:i);
}
}
privatestaticvoidprocessRight(Integer[]source,Integer[]right){
intstart=source.length-1;
right[start]=(source[start]==null?-1:0);
for(inti=start-1;i>=0;i--){
right[i]=(source[i]==null?right[i+1]:i);
}
}
}
                            
查看完整回答
反對 回復 2019-05-23
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

艸,看錯了,看成了{1,2,2,2,5,6,6}了。。。如果照題主的意思,是生成快照同步替換,那null中間的null確實處理不了
從題主的示例{1,2,null,null,5,6,null}轉化為{1,2,2,5,5,6,6}可以看出來:
替換的順序是從左往右
替換時優先使用左邊的值
那么可以推斷出:
如果某個null左邊沒有實數的話,應當是使用右邊的值
那么如果右邊第一位沒有,應該循序找下一位
                            
查看完整回答
反對 回復 2019-05-23
  • 2 回答
  • 0 關注
  • 401 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號