一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して9日目です。クリックしてイベントの詳細をご覧ください。
23 King's Roadのデータ構造で放課後のすべてのコード演習の実装を更新する予定です。試験は通常疑似コードで記述されていますが、強迫性障害のためにすべて実装しました。倉庫はここにあります。
- 線形テーブル
2.2.3、10
- この実際の質問は基本的に質問8と同じです。直接コピーして、パラメーターを変更できます。
- 1つ目は、激しく解決し、新しい配列を開いて、個別にコピーすることです(構造を配列に変更することも同じです)。
- この時間計算量はO(n)であり、空間計算量もO(n)です。
- スペースを節約するために、サイズpの配列を作成して、前の配列[0、p-1]を一時的に格納し、元の配列を全体として左に移動してから、スペースの複雑さを順番に戻すこともできます。 O(p)に縮小されます
void change(SqList &list, int p, int n) {
// 1.左右两个数组分别是[0, p-1], [p, n-1]
SqList copied = list;
int k = -1;
// 2.分别复制进去
for (int i = p; i < n; i++) {
copied.data[++k] = list.data[i];
}
for (int i = 0; i < p; i++) {
copied.data[++k] = list.data[i];
}
// 3.新换旧
list = copied;
}
复制代码
- 4つまたは2つのダイヤルで1,000ポンド、全体が反転され、次に個別に反転されます
- たとえば、[1、2、3、4]は[4、3、2、1]に反転され、次に配列[4、3]の1つは[3、4]に反転され、もう1つは[2、 1]が逆になります[1、2]に設定すると、最終結果は[3、4、1、2]になります。
- 時間計算量O(n)、空間計算量O(1)
void reverse(SqList &list, int l, int r) {
if (l > r || r > list.length) return;
for (int i = 0; i < (r-l+1)/2 ; i++) {
swap(list.data[l+i], list.data[r-i]);
}
}
void change2(SqList &list, int p, int n) {
// 注意参数
reverse(list, 0, n);
reverse(list, 0, p);
reverse(list, p, n);
}
复制代码
2.2.3、11
- 2つの順序付けられたシーケンスをマージした後に中央値を見つけると、暴力的なソリューションが直接マージされます。
- 質問7を直接コピーして、その
(A.length + B.length)/2
位置 - 次に、すべてをマージする必要はなく、データを格納するための補助テーブルも必要ないことがわかります。この位置にループするだけです。
- タイトルの要件に注意してください。midは次のようになります。
(A.length + B.length - 1) / 2
- 時間計算量O(n)、空間計算量O(1)
int merge(SqList A, SqList B) {
int i = 0, j = 0, k = -1, mid = (A.length + B.length - 1) / 2;
// 条件也不需要,因为我们找到中间值就会直接return
while (1) {
++k;
if (A.data[i] <= B.data[j]) {
if (k == mid) return A.data[i];
i++;
} else {
if (k == mid) return B.data[j];
j++;
}
}
}
复制代码
- 真ん中に直接ループすることもできます。毎回判断する必要はありません。
==mid
int merge2(SqList A, SqList B) {
int i = 0, j = 0, mid = (A.length + B.length - 1) / 2 ;
while (i+j < mid) {
if (A.data[i] <= B.data[j]) i++;
else j++;
}
return A.data[i] < B.data[j] ? A.data[i] : B.data[j];
}
复制代码
- 最適な解決策は試験に推奨されません、時間コストが高すぎます(大物を除く)、結局のところ、暴力的な解決策はせいぜい5ポイントのギャップしかないようです、それは不要です
- ここには書きません、ワンダオの答えを見てください