Leetcode 21:2つの秩序チェーンテーブル(Merge Two Sorted Lists)をマージ
6512 ワード
タイトルの説明:2つの順序付きチェーンテーブルを新しい順序付きチェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:入力:1->2->4、1->3->4出力:1->1->2->3->4->4
アルゴリズムの考え方:2つのチェーンテーブルの要素を順次比較し、両方の小さい要素を新しいチェーンテーブルに順次挿入し、そのうちの1つのチェーンテーブルのノードが最初にすべて新しいチェーンテーブルに挿入されると、別のチェーンテーブルの残りの要素を新しいチェーンテーブルのテーブルの末尾に挿入します.
コード実装(Java):
複雑度解析:時間複雑度:O(n),nは大きいチェーンテーブルのノード数空間複雑度:O(1)実行時間:9 ms
要点まとめ:1.参照タイプ:Javaでは、参照タイプの変数はC/C++のポインタによく似ています.参照タイプはオブジェクトを指し、オブジェクトを指す変数は参照変数です.これらの変数は、Employee、Puppyなど、宣言時に特定のタイプに指定されます.変数が宣言されると、タイプは変更できません.オブジェクト、配列はすべて参照データ型です.すべての参照タイプのデフォルト値はnullです.1つの参照変数は、互換性のあるタイプを参照するために使用できます.例:ListNode head=new ListNode(0).1つの変数が指すデータがオブジェクトタイプである場合、この場合、2つのメモリが含まれ、オブジェクト自体が1つのメモリ(スタックメモリ)を占有し、変数も1つのメモリ、例えばObjet obj=new Object()を占有する.変数objはメモリであり、new Object()は別のメモリである.この場合、変数objに対応するメモリに格納される数値は、オブジェクトが占有するメモリのヘッダアドレスである.
2.JavaのStringクラスも参照データ型に属し、StringタイプにとってString a=new String(「foo」)である.String b = new String(“foo”); 2つのnew文は2つのオブジェクトを作成し、a/bという2つの変数でそれぞれ1つのオブジェクトを指します.これは2つの異なるオブジェクトで、それらのヘッダアドレスは異なります.すなわち、aとbに格納されている数値は異なるので、式a==bはfalseを返します.この2つのオブジェクトの内容は同じです.したがって、式a.equals(b)はtrueを返します.
String str = “scce”;//これは、静的データ領域にオブジェクトString str 2=「scce」を作成したものです.//静的データオブジェクトを作成するには、まず静的データ領域で調べ、存在する場合は新しいデータを作成せず、静的データ領域のデータが1部しかないことを保証し、str==str 2はtrue//同じオブジェクトString str 2=new String(「scce」)を返します.str==str 2はfalse//スタックにオブジェクトを作成します.参照値が異なるStirngは、静的データ領域に存在する場合、新しいオブジェクトを作成するのではなく、このオブジェクトを指します.
3.参照データ型に対応する組み込みデータ型:byte;short;float;double;long;int;char;boolean.
4.java.lang.Null PointerException異常解析は、プログラムの実行中にcとc++に相当する空のポインタが常に発生する問題のため、よくチェックすれば解決できます.
例:入力:1->2->4、1->3->4出力:1->1->2->3->4->4
アルゴリズムの考え方:2つのチェーンテーブルの要素を順次比較し、両方の小さい要素を新しいチェーンテーブルに順次挿入し、そのうちの1つのチェーンテーブルのノードが最初にすべて新しいチェーンテーブルに挿入されると、別のチェーンテーブルの残りの要素を新しいチェーンテーブルのテーブルの末尾に挿入します.
コード実装(Java):
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null && l2 == null){
return null;
}
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
ListNode head = new ListNode(0);//
ListNode curr = head; //
while(l1 != null && l2 != null){
if(l1.val <= l2.val){
curr.next = l1;
l1 = l1.next;
curr = curr.next;
}else{
curr.next = l2;
l2 = l2.next;
curr = curr.next;
}
}
if(l1 != null){
curr.next = l1;
}
if(l2 != null){
curr.next = l2;
}
return head.next;
}
}
複雑度解析:時間複雑度:O(n),nは大きいチェーンテーブルのノード数空間複雑度:O(1)実行時間:9 ms
要点まとめ:1.参照タイプ:Javaでは、参照タイプの変数はC/C++のポインタによく似ています.参照タイプはオブジェクトを指し、オブジェクトを指す変数は参照変数です.これらの変数は、Employee、Puppyなど、宣言時に特定のタイプに指定されます.変数が宣言されると、タイプは変更できません.オブジェクト、配列はすべて参照データ型です.すべての参照タイプのデフォルト値はnullです.1つの参照変数は、互換性のあるタイプを参照するために使用できます.例:ListNode head=new ListNode(0).1つの変数が指すデータがオブジェクトタイプである場合、この場合、2つのメモリが含まれ、オブジェクト自体が1つのメモリ(スタックメモリ)を占有し、変数も1つのメモリ、例えばObjet obj=new Object()を占有する.変数objはメモリであり、new Object()は別のメモリである.この場合、変数objに対応するメモリに格納される数値は、オブジェクトが占有するメモリのヘッダアドレスである.
2.JavaのStringクラスも参照データ型に属し、StringタイプにとってString a=new String(「foo」)である.String b = new String(“foo”); 2つのnew文は2つのオブジェクトを作成し、a/bという2つの変数でそれぞれ1つのオブジェクトを指します.これは2つの異なるオブジェクトで、それらのヘッダアドレスは異なります.すなわち、aとbに格納されている数値は異なるので、式a==bはfalseを返します.この2つのオブジェクトの内容は同じです.したがって、式a.equals(b)はtrueを返します.
String str = “scce”;//これは、静的データ領域にオブジェクトString str 2=「scce」を作成したものです.//静的データオブジェクトを作成するには、まず静的データ領域で調べ、存在する場合は新しいデータを作成せず、静的データ領域のデータが1部しかないことを保証し、str==str 2はtrue//同じオブジェクトString str 2=new String(「scce」)を返します.str==str 2はfalse//スタックにオブジェクトを作成します.参照値が異なるStirngは、静的データ領域に存在する場合、新しいオブジェクトを作成するのではなく、このオブジェクトを指します.
3.参照データ型に対応する組み込みデータ型:byte;short;float;double;long;int;char;boolean.
4.java.lang.Null PointerException異常解析は、プログラムの実行中にcとc++に相当する空のポインタが常に発生する問題のため、よくチェックすれば解決できます.