Files

94 lines
2.7 KiB
Kotlin
Raw Permalink Normal View History

2026-01-29 17:04:05 +08:00
/**
* 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!")
}