diff --git a/problems/0027.移除元素.md b/problems/0027.移除元素.md index cf343f66..f7142bad 100644 --- a/problems/0027.移除元素.md +++ b/problems/0027.移除元素.md @@ -338,6 +338,20 @@ int removeElement(int* nums, int numsSize, int val){ return slow; } ``` + + +Kotlin: +```kotlin +fun removeElement(nums: IntArray, `val`: Int): Int { + var slowIndex = 0 // 初始化慢指针 + for (fastIndex in nums.indices) { + if (nums[fastIndex] != `val`) nums[slowIndex++] = nums[fastIndex] // 在慢指针所在位置存储未被删除的元素 + } + return slowIndex + } +``` + + Scala: ```scala object Solution { @@ -353,5 +367,6 @@ object Solution { } } ``` + -----------------------
diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index fed25393..50f01226 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -612,6 +612,40 @@ public class Solution{ } } ``` + + + +**Kotlin:** +```Kotlin +// (版本一)左闭右开区间 +class Solution { + fun search(nums: IntArray, target: Int): Int { + var left = 0 + var right = nums.size // [left,right) 右侧为开区间,right 设置为 nums.size + while (left < right) { + val mid = (left + right) / 2 + if (nums[mid] < target) left = mid + 1 + else if (nums[mid] > target) right = mid // 代码的核心,循环中 right 是开区间,这里也应是开区间 + else return mid + } + return -1 // 没有找到 target ,返回 -1 + } +} +// (版本二)左闭右闭区间 +class Solution { + fun search(nums: IntArray, target: Int): Int { + var left = 0 + var right = nums.size - 1 // [left,right] 右侧为闭区间,right 设置为 nums.size - 1 + while (left <= right) { + val mid = (left + right) / 2 + if (nums[mid] < target) left = mid + 1 + else if (nums[mid] > target) right = mid - 1 // 代码的核心,循环中 right 是闭区间,这里也应是闭区间 + else return mid + } + return -1 // 没有找到 target ,返回 -1 + } +} +``` **Scala:** (版本一)左闭右闭区间 @@ -655,5 +689,6 @@ object Solution { } ``` + -----------------------
diff --git a/problems/0977.有序数组的平方.md b/problems/0977.有序数组的平方.md index bfe8cda1..20bdf7b0 100644 --- a/problems/0977.有序数组的平方.md +++ b/problems/0977.有序数组的平方.md @@ -360,6 +360,30 @@ class Solution { } } ``` + +Kotlin: +```kotlin +class Solution { + // 双指针法 + fun sortedSquares(nums: IntArray): IntArray { + var res = IntArray(nums.size) + var left = 0 // 指向数组的最左端 + var right = nums.size - 1 // 指向数组端最右端 + // 选择平方数更大的那一个往 res 数组中倒序填充 + for (index in nums.size - 1 downTo 0) { + if (nums[left] * nums[left] > nums[right] * nums[right]) { + res[index] = nums[left] * nums[left] + left++ + } else { + res[index] = nums[right] * nums[right] + right-- + } + } + return res + } +} +``` + Scala: 双指针: