Skip to content

Conversation

@colorbox
Copy link
Owner

@colorbox colorbox commented Sep 28, 2025

参照したPR

hayashi-ay/leetcode#27
shining-ai/leetcode#31
YukiMichishita/LeetCode#7

https://discord.com/channels/1084280443945353267/1192736784354918470/1199018938005213234

あー、えーとですね。

範囲を絞っていく、というお題なわけですよね。
left = 0
right = len(nums) - 1

と書いたら、left と right の両端を含む、この範囲にある、ということを考えていますね。
言い換えると、「target はあるとすると、left 以上、right 以下に必ずある」ということです。

「target はあるとすると、10以上10以下にあるんだよねー。」といわれたら、10確認しろよ、ってなりますよね。
だから、両端を含む場合は、同じ値でも確認しないといけません。

また、middle として、100を選んで、そこになかった場合。そこよりも左か、そこよりも右にあるかが、値次第で分かるわけです。

left, right は両端を含むわけですから、99以下にあることか101以上にあることかが分かるわけですね。だから1を足し引きします。

 middle の選び方は、left <= middle <= right であれば、この議論だとどこでも大丈夫なはずです。区間は、最低1減っていきますから。

これが頭にあれば、それほど抵抗なく書けませんか?

ちなみに、現実的には、たぶん、個数が50個くらい以下ならば、ループで頭から探したほうが速いでしょう。(少なくとも C++ では。)
分岐予測との兼ね合いです。 
left = 0
right = len(nums)

とすることもできて、そうすると、左は含むが右は含まないつもりで書いているわけですね。left 以上 right 未満。
「target はあるとすると、10以上10未満にあるんだよねー。」といったらそんな数はありません。

また、middle として、100を選んで、そこになかった場合。そこよりも左か、そこよりも右にあるかが、値次第で分かるわけです。

要は、100未満にあることか101以上にあることかが分かるわけですね。

middle の選び方は、left <= middle < right に変わります。

というわけで、注目ポイント次第ですね。開区間、半開区間、閉区間とかいったりします。
>個数が50個くらい以下ならば、ループで頭から探したほうが速いでしょう。

これ、検証してみます? Python だとそうでもないかもしれません。

goto-untrapped/Arai60#18
rossy0213/leetcode#15
h1rosaka/arai60#33
sakupan102/arai60-practice#32
Exzrgs/LeetCode#18
SuperHotDogCat/coding-interview#28
SuperHotDogCat/coding-interview#28
fhiyo/leetcode#32
Yoshiki-Iwasa/Arai60#46
Ryotaro25/leetcode_first60#34
seal-azarashi/leetcode#28
kazukiii/leetcode#32
TORUS0818/leetcode#33
haniwachann/leetcode#5
hroc135/leetcode#29
olsen-blue/Arai60#31
Mike0121/LeetCode#50
fuga-98/arai60#31
Fuminiton/LeetCode#31
tarinaihitori/leetcode#31
Miyamoto-tryk/leetcode-arai60#4
irohafternoon/LeetCode#34
tokuhirat/LeetCode#31
ryoooooory/LeetCode#34
Satorien/LeetCode#31
potrue/leetcode#31
ryosuketc/leetcode_arai60#44
Kazuryu0907/LeetCode_Arai60#10
shintaro1993/arai60#35
h1rosaka/arai60#33

public:
int lengthOfLIS(vector<int>& nums) {
vector<int> increasing_sequence;
for (auto num: nums) {
Copy link

Choose a reason for hiding this comment

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

: の両側にスペースを空けることをおすすめします。

参考までにスタイルガイドへのリンクを貼ります。

https://google.github.io/styleguide/cppguide.html#Horizontal_Whitespace

for (auto x : counts) {

上記のスタイルガイドは唯一絶対のルールではなく、複数あるスタイルガイドの一つに過ぎないということを念頭に置くことをお勧めします。また、所属するチームにより何が良いとされているかは変わります。自分の中で良い書き方の基準を持ちつつ、チームの平均的な書き方で書くことをお勧めいたします。

}
}
}
int max_count = 0;
Copy link

Choose a reason for hiding this comment

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

max_lis_sizeとかでも良いかと思いました。
あとは定義してから返すまでのコード量が多くなく、意味を理解しやすいのでresultとかでも良い気がします。

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants