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:
双指针: