@@ -454,4 +454,94 @@ fun longestMountain(arr: IntArray): Int {
454
454
return longestMountain
455
455
}
456
456
457
+ /* *
458
+ * 1493. Longest Subarray of 1's After Deleting One Element
459
+ */
460
+
461
+ fun longestSubArray (nums : IntArray ): Int {
462
+ var left = 0
463
+ var zeroCount = 0
464
+ var maxLen = 0
465
+
466
+ for (right in nums.indices) {
467
+ if (nums[right] == 0 ) {
468
+ zeroCount++
469
+ }
470
+
471
+ while (zeroCount > 1 ) {
472
+ if (nums[left] == 0 ) {
473
+ zeroCount--
474
+ }
475
+ left++
476
+ }
477
+
478
+ maxLen = maxOf(maxLen, right - left)
479
+ }
480
+
481
+ return maxLen
482
+ }
483
+
484
+ /* *
485
+ * 2771. Longest Non-decreasing Subarray From Two Arrays
486
+ */
487
+
488
+
489
+ fun maxNonDecreasingLength (nums1 : IntArray , nums2 : IntArray ): Int {
490
+ val n = nums1.size
491
+ // dp1[i]: Length of the longest non-decreasing subarray ending at index i, choosing nums1[i]
492
+ // dp2[i]: Length of the longest non-decreasing subarray ending at index i, choosing nums2[i]
493
+ val dp1 = IntArray (n) { 1 }
494
+ val dp2 = IntArray (n) { 1 }
495
+ var maxLen = 1
496
+
497
+ for (i in 1 until n) {
498
+ // Case 1: Extending from nums1[i-1] to nums1[i]
499
+ if (nums1[i] >= nums1[i - 1 ]) {
500
+ dp1[i] = dp1[i - 1 ] + 1
501
+ }
502
+
503
+ // Case 2: Extending from nums2[i-1] to nums1[i]
504
+ if (nums1[i] >= nums2[i - 1 ]) {
505
+ dp1[i] = maxOf(dp1[i], dp2[i - 1 ] + 1 )
506
+ }
507
+
508
+ // Case 3: Extending from nums2[i-1] to nums2[i]
509
+ if (nums2[i] >= nums2[i - 1 ]) {
510
+ dp2[i] = dp2[i - 1 ] + 1
511
+ }
512
+
513
+ // Case 4: Extending from nums1[i-1] to nums2[i]
514
+ if (nums2[i] >= nums1[i - 1 ]) {
515
+ dp2[i] = maxOf(dp2[i], dp1[i - 1 ] + 1 )
516
+ }
517
+
518
+ // Update the overall maximum length
519
+ maxLen = maxOf(maxLen, maxOf(dp1[i], dp2[i]))
520
+ }
521
+
522
+ return maxLen
523
+ }
524
+
525
+ /* *
526
+ * 1218. Longest Arithmetic Subsequence of Given Difference
527
+ */
528
+
529
+
530
+ fun longestSubsequence (arr : IntArray , difference : Int ): Int {
531
+ val dp = mutableMapOf<Int , Int >()
532
+ var maxLen = 0
533
+
534
+ for (num in arr) {
535
+ val prev = num - difference
536
+ val len = dp.getOrDefault(prev, 0 ) + 1
537
+ dp[num] = len
538
+ maxLen = maxOf(maxLen, len)
539
+ }
540
+
541
+ return maxLen
542
+ }
543
+
544
+
545
+
546
+
457
547
0 commit comments