ディレクトリ
顔の質問5オファー安全性を証明するために---スペースを置き換えます
1.はじめに
機能、置換文字列内の各スペースを実装する「は20%。」たとえば、 "Hello World" の、出力に "Hello%20World" と入力します。
2、問題解決
バックにトラバースフロント、すべての出会いスペースとすべての文字を置き換える後方に移動するために戻って:方法1を推奨しません。
時間の複雑さ:O(N ^ 2)
推奨方法2:フロントへ戻ってからトラバーサル、コードを見ての詳細なプロセス。
時間の複雑さ:O(n)は、
///arr是要修改的字符串,length表示这个字符串的最大长度
void ChangeSpace(char arr[], int length)
{
if (arr == nullptr || length<=0)
{
return;
}
int i = 0;
//字符串实际长度
int arrLength = 0;
//空格个数
int spaceNum = 0;
while (arr[i] != '\0')
{
if (arr[i] == ' ')
spaceNum++;
arrLength++;
i++;
}
//新字符串需要的长度
int newArrLength = arrLength + spaceNum * 2;
if (newArrLength > length)
return;
//从后向前依次比较替换
while (arrLength >= 0 && newArrLength > arrLength)
{
if (arr[arrLength] == ' ')
{
arr[newArrLength] = '0';
arr[newArrLength-1] = '2';
arr[newArrLength-2] = '%';
arrLength--;
newArrLength-=3;
}
else {
arr[newArrLength] = arr[arrLength];
arrLength--;
newArrLength--;
}
}
}
図3に示すように、変形タイトル
メモリの末端に2つのソートされた配列のA1とA2、A1があり、十分な空き時間の受信A2を持っています。機能を実装し、すべての数字は、A2のインサートをA2、および数字のすべてがソートされています。
///需要排序的两个数组和其各自的长度
void Sort(int arr1[], int arr2[], int length1, int length2)
{
if (arr1 == nullptr || arr2 == nullptr || length2<=0)
{
return;
}
//总长度
int length = length1 + length2;
//从后向前依次比较
while (length1 >= 0 && length > length1)
{
if (arr1[length1-1] >= arr2[length2-1])
{
arr1[length - 1] = arr1[length1 - 1];
length--;
length1--;
}
else {
arr1[length - 1] = arr2[length2 - 1];
length--;
length2--;
}
}
}