mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-10 20:40:39 +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>
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
||||
滑动窗口:
|
||||
|
@ -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:
|
||||
|
||||
|
Reference in New Issue
Block a user