Skip to content

Conversation

@akmhmgc
Copy link
Owner

@akmhmgc akmhmgc commented Oct 1, 2025

解いた問題

33. Search in Rotated Sorted Array

使用言語

Ruby

次に解く問題

1011. Capacity To Ship Packages Within D Days

@akmhmgc akmhmgc added the ruby label Oct 1, 2025
Comment on lines +11 to +13
- 範囲の更新は以下でないと無限ループになる
- left = middle + 1
- right = middle
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

middle の位置が「target より左」「target または target より右」で分類するわけですよね。

なんか「無限ループになるから」は理由として妙な気がしています。

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コメントありがとうございます。
おっしゃる通り考え方が不自然だったので、自分なりに理解を以下のように整理しました。

先にleftやrightの更新方法が決まった後に、「middleをどう決めると毎回範囲を狭めることができるか?」と考えるのが自然ですね。

middleが

  • targetより左
    • leftより左にはtargetがないのでleft = middle + 1に範囲を絞ることができる
  • targetまたはtargetより右
    • rightより右にtargetがないのでright = middleに範囲を絞ることができる

middleを切り捨てで決めるとどちらの場合でも範囲を1絞ることができる

一方で、以下の分類もできる。
middleが

  • targetまたはtargetより左
    • leftより左にtargetがないのでleft = middleに範囲を絞ることができる
  • targetより右
    • rightより右にtargetがないのでright = middle - 1に範囲を絞ることができる

middleを切り上げで決めるとどちらの場合でも範囲を1絞ることができる

while left < right
mid = (left + right) / 2
if nums[mid] <= nums[right]
if nums[mid + 1] <= target && target <= nums[right]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if nums[mid] < target && target <= nums[right]
の方が自然かなと思いました。mid の位置が target 未満と確定する場合、left は mid + 1 で更新するということです。

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コメントありがとうございます。おっしゃる通りですね。
odaさんにもコメントいただきましたが、midがtargetより左/targetあるいはtargetより右で分類しているので、targetより左だと確定した時にleft = mid + 1とする方が自然ですね。

            if nums[mid] < target && target <= nums[right]
                left = mid + 1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants