blog

LeetCode160。リンクリストを交差させる

この質問の練習は、2つのポインタpは、qは、2つのチェーンの先頭を指すように、より泥棒であり、その後、2つのポインタが空でない限り、別の場所を指すように、彼らは、ポインタが空の場合、それは他のチェーン...

Nov 17, 2020 · 2 min. read
シェア

この質問の練習は、より泥棒なので、2つのポインタp、qは、2つのチェーンの先頭を指し、その後、2つのポインタが空でない限り、異なるの場所を指しているように、それらは、ポインタが空になったとき、それは他のチェーンテーブルの先頭を指し、戻って移動されます。

例えば、上の図で、交差する部分、2つのリンクリストの長さをaとb、交差するリンクの後の長さをcとします。

次に、pポインタはa + cの長さで2番目のヘッドheadBを指し、qポインタはb + cの長さで最初のヘッドheadAを指します。

その後、2つのポインターはbとaの長さを行き来し、a + b + cを経て、ようやく2つのポインターが出会います。これは2つのリンクリストが交点を持つ場合です。

この歩き方は、2つのリンクリストが交差しない場合にも成り立ちます。

たとえば、上の図は、pは、最初のチェーンテーブルを歩いて、2番目のチェーンテーブルのヘッドBに歩いて、qは、2番目のチェーンテーブルを歩いて、最初のチェーンテーブルのヘッドAに歩いて、彼らは右の各bのステップとaのステップは、両方のNULLに、NULLああ、2つのポインタがNULLを指していることに注意してください、同じ場所を指すとみなすことができるので、戻り値はpです。

コードは以下の通り:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 * int val;
 * ListNode *next;
 * ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
 auto p = headA, q = headB;
 while(p != q) {
 if(p != NULL) {
 p = p -> next;
 } else {
 p = headB;
 }
 if(q != NULL) {
 q = q -> next;
 } else {
 q = headA;
 }
 }
 return p;
 }
};
Read next

勾配中心化:シンプルな勾配中心化、1行のコードで学習を加速し、汎化能力を向上させる|ECCV 2020 Oral

オプティマイザは、SGDやSGDMのような大規模データセット上のディープニューラルネットワークの学習にとって非常に重要であり、オプティマイザには2つの目的があります。現在、SGDのようなオプティマイザの性能を向上させる方法について、学習における勾配消失や勾配爆発問題の克服、効果的なトリックエンタイトルメントの初期化、活性化関数...など、多くの研究が行われています。

Nov 17, 2020 · 16 min read