From 0d7c2ed1d9bbe45dffa270584c83b741f3e19791 Mon Sep 17 00:00:00 2001 From: rihib Date: Fri, 9 Aug 2024 22:41:39 +0900 Subject: [PATCH 1/2] pullrequests/search_insert_position --- pullrequests/search_insert_position/step1.go | 27 ++++++++++++++++++++ pullrequests/search_insert_position/step2.go | 22 ++++++++++++++++ pullrequests/search_insert_position/step3.go | 22 ++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 pullrequests/search_insert_position/step1.go create mode 100644 pullrequests/search_insert_position/step2.go create mode 100644 pullrequests/search_insert_position/step3.go diff --git a/pullrequests/search_insert_position/step1.go b/pullrequests/search_insert_position/step1.go new file mode 100644 index 0000000..f500b57 --- /dev/null +++ b/pullrequests/search_insert_position/step1.go @@ -0,0 +1,27 @@ +//lint:file-ignore U1000 Ignore all unused code +package searchinsertposition + +/* +時間:12分 +解法自体はすぐに浮かんで解くことができた。 +その割に二分探索を書くのがまだ慣れていなくて少し時間がかかってしまった。 +*/ +func searchInsert_step1(nums []int, target int) int { + left, right := 0, len(nums) + var mid int + for left < right { + mid = (left + right) / 2 + if target == nums[mid] { + return mid + } + if target < nums[mid] { + right = mid + } else { + left = mid + 1 + } + } + if target < nums[mid] { + return mid + } + return mid + 1 +} diff --git a/pullrequests/search_insert_position/step2.go b/pullrequests/search_insert_position/step2.go new file mode 100644 index 0000000..63236c2 --- /dev/null +++ b/pullrequests/search_insert_position/step2.go @@ -0,0 +1,22 @@ +//lint:file-ignore U1000 Ignore all unused code +package searchinsertposition + +/* +最後の部分はleftを返せ馬良いと気づき変更した。 +その他もより読みやすいように直した。 +*/ +func searchInsert_step2(nums []int, target int) int { + left, right := 0, len(nums) + for left < right { + mid := (left + right) / 2 + if nums[mid] == target { + return mid + } + if nums[mid] < target { + left = mid + 1 + } else { + right = mid + } + } + return left +} diff --git a/pullrequests/search_insert_position/step3.go b/pullrequests/search_insert_position/step3.go new file mode 100644 index 0000000..86f7164 --- /dev/null +++ b/pullrequests/search_insert_position/step3.go @@ -0,0 +1,22 @@ +//lint:file-ignore U1000 Ignore all unused code +package searchinsertposition + +/* +オーバーフローを起こさないようにmidの計算方法を修正した +https://github.com/hayashi-ay/leetcode/blob/064fca989bc4ecf9c7bce70237524a3e7ab1a21a/35.%20Search%20Insert%20Position.md?plain=1#L6 +*/ +func searchInsert_step3(nums []int, target int) int { + left, right := 0, len(nums) + for left < right { + mid := left + (right-left)/2 + if nums[mid] == target { + return mid + } + if nums[mid] < target { + left = mid + 1 + } else { + right = mid + } + } + return left +} From e108fe7170f176a693f69482beb5a040940ced2d Mon Sep 17 00:00:00 2001 From: rihib Date: Mon, 12 Aug 2024 22:27:18 +0900 Subject: [PATCH 2/2] add step4 for Search Insert Position --- pullrequests/search_insert_position/step4.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pullrequests/search_insert_position/step4.go diff --git a/pullrequests/search_insert_position/step4.go b/pullrequests/search_insert_position/step4.go new file mode 100644 index 0000000..345396d --- /dev/null +++ b/pullrequests/search_insert_position/step4.go @@ -0,0 +1,15 @@ +//lint:file-ignore U1000 Ignore all unused code +package searchinsertposition + +func searchInsert(nums []int, target int) int { + left, right := 0, len(nums) + for left < right { + mid := left + (right-left)/2 + if nums[mid] < target { + left = mid + 1 + } else { + right = mid + } + } + return left +}