mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-12 21:50:49 +08:00
Merge pull request #1512 from destroyerngu/master
添加0034 Kotlin版,0203 Kotlin版,0209 Koltin版, 0977 Kotlin版
This commit is contained in:
@ -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>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -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>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -420,6 +420,41 @@ fun reverseList(head: ListNode?): ListNode? {
|
|||||||
return pre
|
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:
|
||||||
```swift
|
```swift
|
||||||
|
@ -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:
|
Scala:
|
||||||
|
|
||||||
滑动窗口:
|
滑动窗口:
|
||||||
|
@ -363,6 +363,8 @@ class Solution {
|
|||||||
```
|
```
|
||||||
|
|
||||||
Kotlin:
|
Kotlin:
|
||||||
|
|
||||||
|
双指针法
|
||||||
```kotlin
|
```kotlin
|
||||||
class Solution {
|
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:
|
Scala:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user