File tree 5 files changed +172
-0
lines changed
5 files changed +172
-0
lines changed Original file line number Diff line number Diff line change @@ -584,5 +584,48 @@ object Solution {
584
584
```
585
585
586
586
587
+ ### Kotlin
588
+ ``` kotlin
589
+ class Solution {
590
+ fun searchRange (nums : IntArray , target : Int ): IntArray {
591
+ var index = binarySearch(nums, target)
592
+ // 没找到,返回[-1, -1]
593
+ if (index == - 1 ) return intArrayOf(- 1 , - 1 )
594
+ var left = index
595
+ var right = index
596
+ // 寻找左边界
597
+ while (left - 1 >= 0 && nums[left - 1 ] == target){
598
+ left--
599
+ }
600
+ // 寻找右边界
601
+ while (right + 1 < nums.size && nums[right + 1 ] == target){
602
+ right++
603
+ }
604
+ return intArrayOf(left, right)
605
+ }
606
+ // 二分查找常规写法
607
+ fun binarySearch (nums : IntArray , target : Int ): Int {
608
+ var left = 0 ;
609
+ var right = nums.size - 1
610
+ while (left <= right) {
611
+ var middle = left + (right - left)/ 2
612
+ if (nums[middle] > target) {
613
+ right = middle - 1
614
+ }
615
+ else {
616
+ if (nums[middle] < target) {
617
+ left = middle + 1
618
+ }
619
+ else {
620
+ return middle
621
+ }
622
+ }
623
+ }
624
+ // 没找到,返回-1
625
+ return - 1
626
+ }
627
+ }
628
+ ```
629
+
587
630
-----------------------
588
631
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img ></div >
Original file line number Diff line number Diff line change @@ -534,5 +534,39 @@ object Solution {
534
534
}
535
535
}
536
536
```
537
+ Kotlin:
538
+ ``` kotlin
539
+ /* *
540
+ * Example:
541
+ * var li = ListNode(5)
542
+ * var v = li.`val`
543
+ * Definition for singly-linked list.
544
+ * class ListNode(var `val`: Int) {
545
+ * var next: ListNode? = null
546
+ * }
547
+ */
548
+ class Solution {
549
+ fun removeElements (head : ListNode ? , `val `: Int ): ListNode ? {
550
+ // 使用虚拟节点,令该节点指向head
551
+ var dummyNode = ListNode (- 1 )
552
+ dummyNode.next = head
553
+ // 使用cur遍历链表各个节点
554
+ var cur = dummyNode
555
+ // 判断下个节点是否为空
556
+ while (cur.next != null ) {
557
+ // 符合条件,移除节点
558
+ if (cur.next.`val ` == `val `) {
559
+ cur.next = cur.next.next
560
+ }
561
+ // 不符合条件,遍历下一节点
562
+ else {
563
+ cur = cur.next
564
+ }
565
+ }
566
+ // 注意:返回的不是虚拟节点
567
+ return dummyNode.next
568
+ }
569
+ }
570
+ ```
537
571
-----------------------
538
572
<div align =" center " ><img src =https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width =500 > </img ></div >
Original file line number Diff line number Diff line change @@ -420,6 +420,41 @@ fun reverseList(head: ListNode?): ListNode? {
420
420
return pre
421
421
}
422
422
```
423
+ ``` kotlin
424
+ /* *
425
+ * Example:
426
+ * var li = ListNode(5)
427
+ * var v = li.`val`
428
+ * Definition for singly-linked list.
429
+ * class ListNode(var `val`: Int) {
430
+ * var next: ListNode? = null
431
+ * }
432
+ */
433
+ class Solution {
434
+ fun reverseList (head : ListNode ? ): ListNode ? {
435
+ // temp用来存储临时的节点
436
+ var temp: ListNode ?
437
+ // cur用来遍历链表
438
+ var cur: ListNode ? = head
439
+ // pre用来作为链表反转的工具
440
+ // pre是比pre前一位的节点
441
+ var pre: ListNode ? = null
442
+ while (cur != null ) {
443
+ // 临时存储原本cur的下一个节点
444
+ temp = cur.next
445
+ // 使cur下一节点地址为它之前的
446
+ cur.next = pre
447
+ // 之后随着cur的遍历移动pre
448
+ pre = cur;
449
+ // 移动cur遍历链表各个节点
450
+ cur = temp;
451
+ }
452
+ // 由于开头使用pre为null,所以cur等于链表本身长度+1,
453
+ // 此时pre在cur前一位,所以此时pre为头节点
454
+ return pre;
455
+ }
456
+ }
457
+ ```
423
458
424
459
Swift:
425
460
``` swift
Original file line number Diff line number Diff line change @@ -417,6 +417,38 @@ class Solution {
417
417
}
418
418
}
419
419
```
420
+ 滑动窗口
421
+ ``` kotlin
422
+ class Solution {
423
+ fun minSubArrayLen (target : Int , nums : IntArray ): Int {
424
+ // 左边界 和 右边界
425
+ var left: Int = 0
426
+ var right: Int = 0
427
+ // sum 用来记录和
428
+ var sum: Int = 0
429
+ // result记录一个固定值,便于判断是否存在的这样的数组
430
+ var result: Int = Int .MAX_VALUE
431
+ // subLenth记录长度
432
+ var subLength = Int .MAX_VALUE
433
+
434
+
435
+ while (right < nums.size) {
436
+ // 从数组首元素开始逐次求和
437
+ sum + = nums[right++ ]
438
+ // 判断
439
+ while (sum >= target) {
440
+ var temp = right - left
441
+ // 每次和上一次比较求出最小数组长度
442
+ subLength = if (subLength > temp) temp else subLength
443
+ // sum减少,左边界右移
444
+ sum - = nums[left++ ]
445
+ }
446
+ }
447
+ // 如果subLength为初始值,则说明长度为0,否则返回subLength
448
+ return if (subLength == result) 0 else subLength
449
+ }
450
+ }
451
+ ```
420
452
Scala:
421
453
422
454
滑动窗口:
Original file line number Diff line number Diff line change @@ -363,6 +363,8 @@ class Solution {
363
363
```
364
364
365
365
Kotlin:
366
+
367
+ 双指针法
366
368
``` kotlin
367
369
class Solution {
368
370
// 双指针法
@@ -384,6 +386,32 @@ class Solution {
384
386
}
385
387
}
386
388
```
389
+ 骚操作(暴力思路)
390
+ ``` kotlin
391
+ class Solution {
392
+ fun sortedSquares (nums : IntArray ): IntArray {
393
+ // left 与 right 用来控制循环,类似于滑动窗口
394
+ var left: Int = 0 ;
395
+ var right: Int = nums.size - 1 ;
396
+ // 将每个数字的平方经过排序后加入result数值
397
+ var result: IntArray = IntArray (nums.size);
398
+ var k: Int = nums.size - 1 ;
399
+ while (left <= right) {
400
+ // 从大到小,从后向前填满数组
401
+ // [left, right] 控制循环
402
+ if (nums[left] * nums[left] > nums[right] * nums[right]) {
403
+ result[k-- ] = nums[left] * nums[left]
404
+ left++
405
+ }
406
+ else {
407
+ result[k-- ] = nums[right] * nums[right]
408
+ right--
409
+ }
410
+ }
411
+ return result
412
+ }
413
+ }
414
+ ```
387
415
388
416
Scala:
389
417
You can’t perform that action at this time.
0 commit comments