Files
leetcode/array/1binary search/35search-insert-position/kotlin/Solution.kt
flowerstonezl e1006fa09c first init
2026-01-29 17:04:05 +08:00

94 lines
2.7 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* LeetCode 解题模板
*
* 使用方法:
* 1. 在 Solution 类中实现你的算法
* 2. 在 main 函数中添加测试用例
* 3. 运行kotlinc Solution.kt -include-runtime -d Solution.jar && java -jar Solution.jar
* 或者使用 IDE如 IntelliJ IDEA直接运行
*/
/**
* 示例:搜索插入位置
*
* 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。
* 如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
*
* 请必须使用时间复杂度为 O(log n) 的算法。
*/
class Solution {
/**
* 搜索插入位置
*
* @param nums 排序数组
* @param target 目标值
* @return 目标值的索引,如果不存在则返回插入位置
*/
fun searchInsert(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size - 1
while (left <= right) {
val mid = left + (right - left) / 2
when {
nums[mid] == target -> return mid
nums[mid] < target -> left = mid + 1
else -> right = mid - 1
}
}
return left
}
}
/**
* 打印测试结果
*/
fun printTestResult(testName: String, passed: Boolean) {
val status = if (passed) "pass" else "fail"
println("$testName: $status")
}
/**
* 比较两个整数是否相等
*/
fun assertEquals(actual: Int, expected: Int): Boolean {
return actual == expected
}
fun main() {
val solution = Solution()
// 测试用例 1: 目标值存在于数组中
val nums1 = intArrayOf(1, 3, 5, 6)
val target1 = 5
val result1 = solution.searchInsert(nums1, target1)
val expected1 = 2
printTestResult("test case 1:target exists $target1", assertEquals(result1, expected1))
// 测试用例 2: 目标值不存在,应插入到中间位置
val nums2 = intArrayOf(1, 3, 5, 6)
val target2 = 2
val result2 = solution.searchInsert(nums2, target2)
val expected2 = 1
printTestResult("test case 2:insert in middle $target2", assertEquals(result2, expected2))
// 测试用例 3: 目标值大于所有元素
val nums3 = intArrayOf(1, 3, 5, 6)
val target3 = 7
val result3 = solution.searchInsert(nums3, target3)
val expected3 = 4
printTestResult("test case 3:insert at end $target3", assertEquals(result3, expected3))
// 测试用例 4: 目标值小于所有元素
val nums4 = intArrayOf(1, 3, 5, 6)
val target4 = 0
val result4 = solution.searchInsert(nums4, target4)
val expected4 = 0
printTestResult("test case 4:insert at start $target4", assertEquals(result4, expected4))
println("\n all test cases passed!")
}