21位2つの注文したリストをマージ
2は、新たなソートされたリストとリターンにリストを命じました。新しいリストは、二つのリストで構成与えられたモザイク内のすべてのノードです。
例:
入力:1-> 2-> 4、1-> 3-> 4
出力:1-> 1-> 2-> 3-> 4-> 4
アイデア:新しいリストを設定するには、新しい順序リストを生成する、背面に接続さL1およびL2から小さい方の要素を見つけるために続けています。
/ ** *単一リンクリストのための定義。 *パブリッククラスListNode { * int型のval; * ListNode次。 * ListNode(INT X){ヴァル= X。} *} * / クラスソリューション{ パブリックListNodeのmergeTwoLists(ListNode L1、L2 ListNode){ ListNode dummyHead = 新しい ListNode(0 )。 ListNode CUR = dummyHead。 一方、(!L1 = ヌル!&& L2 = NULL ){ 場合(l1.val < l2.val){ cur.next = L1。 駄犬= cur.next。 L1 = l1.next。 } 他{ cur.next = L2。 CUR = cur.next。 L2 = l2.next。 } } もし(L1 == NULL ){ CUR。次回 = L2; } 他 cur.next = L1。 返すdummyHead.nextを。 } }
26位配列をソートし重複したエントリを削除します
ソートされた配列を考えると、あなたはそれぞれの要素が削除され、配列の新しい長さを戻した後、一度だけ表示されるように、所定の位置に定期的な要素を削除する必要があります。
配列のための余分なスペースを使用しないでください、あなたは代わりに入力配列を変更し、使用のO(1)余分なスペースの条件の下で完了しなければなりません。
思考:デュアルスピードポインタポイント番号を省略する端に発見された、元の配列へのポインタは、ポインタはポインタを見つけるために、同じ速度でゆっくりと異なる場所を見つけるためには後方に移動し続けます。
クラスソリューション{ 公共 のint removeDuplicates(INT [] NUMS){ 場合(NUMS == NULL || nums.length == 1 ){ 戻りnums.length。 } 他{ int型 I = 0、J = 1 。 一方、(J < nums.length){ 場合(NUMS [I] == NUMS [J]){ J ++ 。 } 他{ I ++ 。 NUMS [I] =のNUMS [J]。 J ++ ; } } 戻り I + 1 。 } } }
要素#27を削除します。
配列NUMSと値valを考えると、あなたはすべて同じ値valを削除するために要素を配置する必要があり、除去後の配列の長さを返します。
配列のための余分なスペースを使用しないでください、あなたは代わりに入力配列を変更し、使用のO(1)余分なスペースの条件の下で完了しなければなりません。
要素の順序を変更してもよいです。あなたは、新しい配列の長さの後ろの要素を超えて検討する必要がありません。
アイデア:スピードポインター
クラスソリューション{ 公共 のint removeElement(INT [] NUMS、INT ヴァル){ 場合(NUMS == NULL ||(nums.length == 1 && NUMS [0] =!ヴァル)) 戻りnums.length。 int型 J = 0 ; 以下のために(int型 I 0 =;私はnums.lengthを<; Iは++ ){ 場合(!NUMS [I] = ヴァル){ NUMS [J] = NUMS [I]。 J ++ ; } } 戻りJ。 } }