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 +} 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 +}