From fd7f47f0c1a51c260a1892a8d41d5a7007a13f3a Mon Sep 17 00:00:00 2001 From: Jinho Hyeon Date: Sat, 8 Feb 2025 23:07:23 +0900 Subject: [PATCH] week 9 --- .../neverlish.go | 14 +++++++ linked-list-cycle/neverlish.go | 15 ++++++++ maximum-product-subarray/neverlish.go | 37 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 find-minimum-in-rotated-sorted-array/neverlish.go create mode 100644 linked-list-cycle/neverlish.go create mode 100644 maximum-product-subarray/neverlish.go diff --git a/find-minimum-in-rotated-sorted-array/neverlish.go b/find-minimum-in-rotated-sorted-array/neverlish.go new file mode 100644 index 000000000..33cee33f6 --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/neverlish.go @@ -0,0 +1,14 @@ +// 시간복잡도: O(n) +// 공간복잡도: O(1) + +func findMin(nums []int) int { + result := nums[0] + + for i := 1; i < len(nums)-1; i++ { + if nums[i] < nums[i-1] { + result = nums[i] + } + } + return result + +} diff --git a/linked-list-cycle/neverlish.go b/linked-list-cycle/neverlish.go new file mode 100644 index 000000000..8f36f49ab --- /dev/null +++ b/linked-list-cycle/neverlish.go @@ -0,0 +1,15 @@ +// 시간복잡도: O(n) +// 공간복잡도: O(n) + +func hasCycle(head *ListNode) bool { + visited := make(map[*ListNode]bool) + + for head != nil { + if visited[head] { + return true + } + visited[head] = true + head = head.Next + } + return false +} diff --git a/maximum-product-subarray/neverlish.go b/maximum-product-subarray/neverlish.go new file mode 100644 index 000000000..9e6ce0ef9 --- /dev/null +++ b/maximum-product-subarray/neverlish.go @@ -0,0 +1,37 @@ +// 시간복잡도: O(n) +// 공간복잡도: O(1) + +func maxProduct(nums []int) int { + result, max, min := nums[0], 1, 1 + + for _, num := range nums { + candidates := []int{max * num, min * num, num} + max = maxIntIn3(candidates[0], candidates[1], candidates[2]) + min = minIntIn3(candidates[0], candidates[1], candidates[2]) + if max > result { + result = max + } + } + + return result +} + +func maxIntIn3(a, b, c int) int { + if a > b && a > c { + return a + } + if b > c { + return b + } + return c +} + +func minIntIn3(a, b, c int) int { + if a < b && a < c { + return a + } + if b < c { + return b + } + return c +}