File tree Expand file tree Collapse file tree 5 files changed +51
-38
lines changed
src/main/kotlin/g0001_0100
s0003_longest_substring_without_repeating_characters
s0004_median_of_two_sorted_arrays
s0005_longest_palindromic_substring Expand file tree Collapse file tree 5 files changed +51
-38
lines changed Original file line number Diff line number Diff line change @@ -3,11 +3,11 @@ package g0001_0100.s0001_two_sum
33// #Easy #Top_100_Liked_Questions #Top_Interview_Questions #Array #Hash_Table
44// #Data_Structure_I_Day_2_Array #Level_1_Day_13_Hashmap #Udemy_Arrays #Top_Interview_150_Hashmap
55// #Big_O_Time_O(n)_Space_O(n) #AI_can_be_used_to_solve_the_task
6- // #2023_07_03_Time_202_ms_(91.18%)_Space_38.1_MB_(76.07 %)
6+ // #2025_07_11_Time_2_ms_(98.77%)_Space_48.00_MB_(52.59 %)
77
88class Solution {
99 fun twoSum (numbers : IntArray , target : Int ): IntArray {
10- val indexMap: MutableMap <Int , Int > = HashMap ()
10+ val indexMap = HashMap <Int , Int >()
1111 for (i in numbers.indices) {
1212 val requiredNum = target - numbers[i]
1313 if (indexMap.containsKey(requiredNum)) {
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ package g0001_0100.s0002_add_two_numbers
33// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Math #Linked_List #Recursion
44// #Data_Structure_II_Day_10_Linked_List #Programming_Skills_II_Day_15
55// #Top_Interview_150_Linked_List #Big_O_Time_O(max(N,M))_Space_O(max(N,M))
6- // #AI_can_be_used_to_solve_the_task #2023_07_03_Time_203_ms_(96.13%)_Space_41_MB_(77.03 %)
6+ // #AI_can_be_used_to_solve_the_task #2025_07_11_Time_2_ms_(87.63%)_Space_45.71_MB_(80.15 %)
77
88import com_github_leetcode.ListNode
99
Original file line number Diff line number Diff line change @@ -3,30 +3,29 @@ package g0001_0100.s0003_longest_substring_without_repeating_characters
33// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #String #Hash_Table #Sliding_Window
44// #Algorithm_I_Day_6_Sliding_Window #Level_2_Day_14_Sliding_Window/Two_Pointer #Udemy_Strings
55// #Top_Interview_150_Sliding_Window #Big_O_Time_O(n)_Space_O(1) #AI_can_be_used_to_solve_the_task
6- // #2023_07_03_Time_201_ms_(87.28%)_Space_38.3_MB_(60.85 %)
6+ // #2025_07_11_Time_3_ms_(99.17%)_Space_46.05_MB_(66.40 %)
77
88class Solution {
99 fun lengthOfLongestSubstring (s : String ): Int {
10- var i = 0
11- var j = 0
12- var longest = 0
13- // 1. if string empty, return 0
14- if (s.isEmpty()) {
15- return 0
16- }
17- while (j < s.length) {
18- // 2. if the char at index j already seen, update the longest if needs
19- if (i != j && s.substring(i, j).indexOf(s[j]) > - 1 ) {
20- longest = Math .max(j - i, longest)
21- i++
10+ val lastIndices = IntArray (256 ) { - 1 }
11+ var maxLen = 0
12+ var curLen = 0
13+ var start = 0
14+ for (i in s.indices) {
15+ val cur = s[i]
16+ if (lastIndices[cur.code] < start) {
17+ lastIndices[cur.code] = i
18+ curLen++
2219 } else {
23- // 3. j out of bound already, update longest
24- if (++ j == s.length) {
25- longest = Math .max(s.length - i, longest)
26- break
27- }
20+ val lastIndex = lastIndices[cur.code]
21+ start = lastIndex + 1
22+ curLen = i - start + 1
23+ lastIndices[cur.code] = i
24+ }
25+ if (curLen > maxLen) {
26+ maxLen = curLen
2827 }
2928 }
30- return longest
29+ return maxLen
3130 }
3231}
Original file line number Diff line number Diff line change @@ -2,25 +2,39 @@ package g0001_0100.s0004_median_of_two_sorted_arrays
22
33// #Hard #Top_100_Liked_Questions #Top_Interview_Questions #Array #Binary_Search #Divide_and_Conquer
44// #Top_Interview_150_Binary_Search #Big_O_Time_O(log(min(N,M)))_Space_O(1)
5- // #AI_can_be_used_to_solve_the_task #2023_07_03_Time_293_ms_(75.96%)_Space_47.5_MB_(64.85%)
5+ // #AI_can_be_used_to_solve_the_task #2025_07_11_Time_2_ms_(99.23%)_Space_51.04_MB_(73.69%)
6+
7+ import kotlin.math.max
8+ import kotlin.math.min
69
710class Solution {
811 fun findMedianSortedArrays (nums1 : IntArray , nums2 : IntArray ): Double {
9- val l: MutableList <Int > = ArrayList ()
10- val f: Double
11- for (j in nums1) {
12- l.add(j)
13- }
14- for (i in nums2) {
15- l.add(i)
12+ if (nums2.size < nums1.size) {
13+ return findMedianSortedArrays(nums2, nums1)
1614 }
17- l.sort()
18- val k = l.size
19- f = if (k % 2 == 0 ) {
20- (l[k / 2 - 1 ] + l[k / 2 ]).toDouble() / 2
21- } else {
22- l[(k + 1 ) / 2 - 1 ].toDouble()
15+ val n1 = nums1.size
16+ val n2 = nums2.size
17+ var low = 0
18+ var high = n1
19+ while (low <= high) {
20+ val cut1 = (low + high) / 2
21+ val cut2 = ((n1 + n2 + 1 ) / 2 ) - cut1
22+ val l1 = if (cut1 == 0 ) Int .MIN_VALUE else nums1[cut1 - 1 ]
23+ val l2 = if (cut2 == 0 ) Int .MIN_VALUE else nums2[cut2 - 1 ]
24+ val r1 = if (cut1 == n1) Int .MAX_VALUE else nums1[cut1]
25+ val r2 = if (cut2 == n2) Int .MAX_VALUE else nums2[cut2]
26+ if (l1 <= r2 && l2 <= r1) {
27+ return if ((n1 + n2) % 2 == 0 ) {
28+ (max(l1, l2).toDouble() + min(r1, r2).toDouble()) / 2.0
29+ } else {
30+ max(l1, l2).toDouble()
31+ }
32+ } else if (l1 > r2) {
33+ high = cut1 - 1
34+ } else {
35+ low = cut1 + 1
36+ }
2337 }
24- return f
38+ return 0.0
2539 }
2640}
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ package g0001_0100.s0005_longest_palindromic_substring
33// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #String #Dynamic_Programming
44// #Data_Structure_II_Day_9_String #Algorithm_II_Day_14_Dynamic_Programming
55// #Dynamic_Programming_I_Day_17 #Udemy_Strings #Top_Interview_150_Multidimensional_DP
6- // #Big_O_Time_O(n)_Space_O(n) #2023_07_03_Time_162_ms_(99.00%)_Space_36.6_MB_(79.10 %)
6+ // #Big_O_Time_O(n)_Space_O(n) #2025_07_11_Time_8_ms_(96.61%)_Space_43.12_MB_(69.70 %)
77
88class Solution {
99 fun longestPalindrome (s : String ): String {
You can’t perform that action at this time.
0 commit comments