94 lines
2.7 KiB
Kotlin
94 lines
2.7 KiB
Kotlin
/**
|
||
* 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!")
|
||
}
|
||
|