Merge pull request #1512 from destroyerngu/master

添加0034 Kotlin版,0203 Kotlin版,0209 Koltin版, 0977 Kotlin版
This commit is contained in:
程序员Carl
2022-07-20 09:43:16 +08:00
committed by GitHub
5 changed files with 172 additions and 0 deletions

View File

@ -584,5 +584,48 @@ object Solution {
```
### Kotlin
```kotlin
class Solution {
fun searchRange(nums: IntArray, target: Int): IntArray {
var index = binarySearch(nums, target)
// 没找到,返回[-1, -1]
if (index == -1) return intArrayOf(-1, -1)
var left = index
var right = index
// 寻找左边界
while (left - 1 >=0 && nums[left - 1] == target){
left--
}
// 寻找右边界
while (right + 1 <nums.size && nums[right + 1] == target){
right++
}
return intArrayOf(left, right)
}
// 二分查找常规写法
fun binarySearch(nums: IntArray, target: Int): Int {
var left = 0;
var right = nums.size - 1
while (left <= right) {
var middle = left + (right - left)/2
if (nums[middle] > target) {
right = middle - 1
}
else {
if (nums[middle] < target) {
left = middle + 1
}
else {
return middle
}
}
}
// 没找到,返回-1
return -1
}
}
```
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

View File

@ -534,5 +534,39 @@ object Solution {
}
}
```
Kotlin:
```kotlin
/**
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
class Solution {
fun removeElements(head: ListNode?, `val`: Int): ListNode? {
// 使用虚拟节点令该节点指向head
var dummyNode = ListNode(-1)
dummyNode.next = head
// 使用cur遍历链表各个节点
var cur = dummyNode
// 判断下个节点是否为空
while (cur.next != null) {
// 符合条件,移除节点
if (cur.next.`val` == `val`) {
cur.next = cur.next.next
}
// 不符合条件,遍历下一节点
else {
cur = cur.next
}
}
// 注意:返回的不是虚拟节点
return dummyNode.next
}
}
```
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

View File

@ -420,6 +420,41 @@ fun reverseList(head: ListNode?): ListNode? {
return pre
}
```
```kotlin
/**
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
class Solution {
fun reverseList(head: ListNode?): ListNode? {
// temp用来存储临时的节点
var temp: ListNode?
// cur用来遍历链表
var cur: ListNode? = head
// pre用来作为链表反转的工具
// pre是比pre前一位的节点
var pre: ListNode? = null
while (cur != null) {
// 临时存储原本cur的下一个节点
temp = cur.next
// 使cur下一节点地址为它之前的
cur.next = pre
// 之后随着cur的遍历移动pre
pre = cur;
// 移动cur遍历链表各个节点
cur = temp;
}
// 由于开头使用pre为null,所以cur等于链表本身长度+1
// 此时pre在cur前一位所以此时pre为头节点
return pre;
}
}
```
Swift
```swift

View File

@ -417,6 +417,38 @@ class Solution {
}
}
```
滑动窗口
```kotlin
class Solution {
fun minSubArrayLen(target: Int, nums: IntArray): Int {
// 左边界 和 右边界
var left: Int = 0
var right: Int = 0
// sum 用来记录和
var sum: Int = 0
// result记录一个固定值便于判断是否存在的这样的数组
var result: Int = Int.MAX_VALUE
// subLenth记录长度
var subLength = Int.MAX_VALUE
while (right < nums.size) {
// 从数组首元素开始逐次求和
sum += nums[right++]
// 判断
while (sum >= target) {
var temp = right - left
// 每次和上一次比较求出最小数组长度
subLength = if (subLength > temp) temp else subLength
// sum减少左边界右移
sum -= nums[left++]
}
}
// 如果subLength为初始值则说明长度为0否则返回subLength
return if(subLength == result) 0 else subLength
}
}
```
Scala:
滑动窗口:

View File

@ -363,6 +363,8 @@ class Solution {
```
Kotlin:
双指针法
```kotlin
class Solution {
// 双指针法
@ -384,6 +386,32 @@ class Solution {
}
}
```
骚操作(暴力思路)
```kotlin
class Solution {
fun sortedSquares(nums: IntArray): IntArray {
// left 与 right 用来控制循环,类似于滑动窗口
var left: Int = 0;
var right: Int = nums.size - 1;
// 将每个数字的平方经过排序后加入result数值
var result: IntArray = IntArray(nums.size);
var k: Int = nums.size - 1;
while (left <= right) {
// 从大到小,从后向前填满数组
// [left, right] 控制循环
if (nums[left] * nums[left] > nums[right] * nums[right]) {
result[k--] = nums[left] * nums[left]
left++
}
else {
result[k--] = nums[right] * nums[right]
right--
}
}
return result
}
}
```
Scala: