leetcode探索一次アルゴリズム-配列[ソート配列の重複を削除]
3088 ワード
目次 1.題名説明 2. テーマ解析 3.テーマ構想 4.実装コード 1.タイトルの説明
ソート配列を指定すると、繰り返し表示される要素をその場で削除し、各要素が1回だけ表示されるようにして、削除後の配列の新しい長さを返します.
余分な配列空間を使用しないでください.入力配列をその場で変更し、O(1)余分な空間を使用する条件で完了する必要があります.
配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
原題リンク
2.テーマ解析
ここで注意しなければならないことは2つあります.によって与えられた配列は秩序配列であり、そうでなければ以下の解法は成立しない(例えば[1,1,2,1,1]) . javaの配列が初期化された後、長さは変更できません.また、タイトルは入力配列をその場で修正することを要求します.したがって、タイトルには特に「配列の中で新しい長さの後ろを超える要素」 を考慮する必要はありません.
3.テーマの考え方
この問題では、2本の指針法を使用して、1つ目のポインタは重複しない数字のインデックスを指し、2つ目のポインタは配列を遍歴することができます.
公式の問題解.
4.実装コード
ソート配列を指定すると、繰り返し表示される要素をその場で削除し、各要素が1回だけ表示されるようにして、削除後の配列の新しい長さを返します.
余分な配列空間を使用しないでください.入力配列をその場で変更し、O(1)余分な空間を使用する条件で完了する必要があります.
配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
原題リンク
2.テーマ解析
ここで注意しなければならないことは2つあります.
3.テーマの考え方
この問題では、2本の指針法を使用して、1つ目のポインタは重複しない数字のインデックスを指し、2つ目のポインタは配列を遍歴することができます.
公式の問題解.
4.実装コード
public static int returnNoSameNum(int[] nums) {
if(nums.length == 0) return 0;
int i = 0;
for(int j = 1; j < nums.length; j++) {
if(nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}