val a = ArrayBuffer[Int](1, 2,3, 5, -1, 2, -3, -5) a: scala.collection.mutable.ArrayBuff..."/>
溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

移除數(shù)組中第一個(gè)負(fù)數(shù)后的所有負(fù)數(shù)

發(fā)布時(shí)間:2020-08-03 17:55:30 來源:網(wǎng)絡(luò) 閱讀:789 作者:斷情漠 欄目:大數(shù)據(jù)
scala> val a = ArrayBuffer[Int](1, 2,3, 5, -1, 2, -3, -5)
a: scala.collection.mutable.ArrayBuffer[Int]= ArrayBuffer(1, 2, 3, 5, -1, 2, -3
, -5)
 
scala> :paste
// Entering paste mode (ctrl-D tofinish)
 
var foundFirstNegative = false
val keepIndexes = for (i <- 0 untila.length if !foundFirstNegative || a(i) > 0) # 說明1
yield {
if (a(i) < 0) foundFirstNegative =true; i # 說明2
}
for (i <- 0 until keepIndexes.length)a(i) = a(keepIndexes(i)) # 說明3
a.trimEnd(a.length - keepIndexes.length)# 說明4
 
// Exiting paste mode, now interpreting.
 
foundFirstNegative: Boolean = true
keepIndexes:scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 2, 3, 4,
5)
scala> a
res4:scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 5, -1, 2)

算法說明:避免傳統(tǒng)多次移動(dòng)數(shù)組,多次remove,上述代碼設(shè)計(jì)優(yōu)點(diǎn)在于統(tǒng)一找出不滿足條件的元素index,然后統(tǒng)一刪除這些元素。

說明1:第一個(gè)負(fù)數(shù)和所有正數(shù)都會(huì)通過if守衛(wèi);

說明2:第一個(gè)負(fù)數(shù)通過if守衛(wèi),進(jìn)入說明2代碼,將foundFirstNegative置為true,后續(xù)的負(fù)數(shù)則通不過if守衛(wèi)部分,且iif是獨(dú)立的,并未使用塊包圍;

說明3:將a中前keepIndexes.length個(gè)元素置為對應(yīng)的整數(shù)和第一個(gè)負(fù)數(shù);

說明4:刪掉akeepIndexes.length – 1位置后面的元素,剩下的即為所求元素。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI