Size: a a a

StartAndroid Ru Kotlin

2020 July 30

T

Timur in StartAndroid Ru Kotlin
а как еще обратиться к индексам?
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
попробуй intArrayOf(3, 4) и должно срабатывать 2 раза
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
а какая задача?
источник

T

Timur in StartAndroid Ru Kotlin
источник

T

Timur in StartAndroid Ru Kotlin
Yevhen Railian
попробуй intArrayOf(3, 4) и должно срабатывать 2 раза
там проверка на одинаковые элементы стоит
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
если быстро и на функциональном подходе то так
fun sumOf2(intArray: IntArray, target: Int): IntArray {
   intArray.forEachIndexed { index1, i1 ->
       intArray.drop(index1 + 1).forEachIndexed { index2, i2 ->
           if (i1 + i2 == target) return intArrayOf(index1, index2)
       }
   }
   // else return an emtpy array
   return intArrayOf()
}
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
точнее так
fun sumOf2(intArray: IntArray, target: Int): IntArray {
   intArray.forEachIndexed { index1, i1 ->
       intArray.drop(index1 + 1).forEachIndexed { index2, i2 ->
           if (i1 + i2 == target) return intArrayOf(index1, index2 + index1 + 1)
       }
   }
   // else return an emtpy array
   return intArrayOf()
}
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
for(i in nums) - это так называемый на всех языках foreach. он перебирает только значения. Он тебе не подходит потому что тебе нужны индексы тоже
источник

T

Timur in StartAndroid Ru Kotlin
точно. Спасибо за помощь
источник

T

Timur in StartAndroid Ru Kotlin
Yevhen Railian
точнее так
fun sumOf2(intArray: IntArray, target: Int): IntArray {
   intArray.forEachIndexed { index1, i1 ->
       intArray.drop(index1 + 1).forEachIndexed { index2, i2 ->
           if (i1 + i2 == target) return intArrayOf(index1, index2 + index1 + 1)
       }
   }
   // else return an emtpy array
   return intArrayOf()
}
drop удаляет элемент и ставит на его место следующий?
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
поэтому либо добро пожаловать класический for (index in 0 until intArray.size) или forEachIndexed
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
он просто отбрасывает первые n элементов
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
ну а потом приходится их обратно вернуть к нумерации index2 + index1 + 1 чтобы правильно отображался индекс второго элемента
источник

T

Timur in StartAndroid Ru Kotlin
а зачем их отбрасывать?
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
[1,2,3,4,5,6,7] drop 3 = [4,5,6,7]
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
чтобы они больше не учавствовали в сравнениях
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
ну или добавить в проверку условие index2 > index1

fun sumOf2(intArray: IntArray, target: Int): IntArray {
   intArray.forEachIndexed { index1, i1 ->
       intArray.forEachIndexed { index2, i2 ->
           if (index2 > index1 && i1 + i2 == target) return intArrayOf(index1, index2)
       }
   }
   // else return an emtpy array
   return intArrayOf()
}
источник

T

Timur in StartAndroid Ru Kotlin
теперь понял
источник
2020 July 31

T

Timur in StartAndroid Ru Kotlin
У меня одного такое бывает?
источник

T

Timur in StartAndroid Ru Kotlin
всем привет. Кто знает как сделать так чтобы итератор вложенного цикла был равен итератору основного цикла +1
например  
for(int i = 0 ; i<n: i++)
   for(int j = i + 1 ; j<n; j++)
типо такого токо на kotlin
источник