@@ -178,3 +178,8 @@ Alogrithm/TestResults/3a4f3224-7b61-4f96-9f94-502bfe5fd902/林_MI-1 2021-01-26 1 | |||||
Alogrithm/TestResults/8c6c8585-34aa-48ac-85e3-14d7928dfa16/林_MI-1 2021-01-26 13_40_06.coverage | Alogrithm/TestResults/8c6c8585-34aa-48ac-85e3-14d7928dfa16/林_MI-1 2021-01-26 13_40_06.coverage | ||||
Alogrithm/TestResults/a754108b-7c18-474b-b14f-0bda44b6f79f/林_MI-1 2021-01-26 13_35_01.coverage | Alogrithm/TestResults/a754108b-7c18-474b-b14f-0bda44b6f79f/林_MI-1 2021-01-26 13_35_01.coverage | ||||
Alogrithm/UnitTest/Debug/UnitTest.tlog/link.1416.delete.1.tlog | Alogrithm/UnitTest/Debug/UnitTest.tlog/link.1416.delete.1.tlog | ||||
Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/32e7304035ccb73/22_ROTATE.ipch | |||||
Alogrithm/.vs/Alogrithm/v16/ipch/AutoPCH/eb64263dd3de4a08/22_ROTATE.ipch | |||||
Alogrithm/.vs/Alogrithm/v16/TestStore/0/007.testlog | |||||
Alogrithm/Alogrithm/Debug/22_Rotate.obj | |||||
Alogrithm/UnitTest/Debug/UnitTest.tlog/link.15328.delete.1.tlog |
@@ -153,6 +153,7 @@ | |||||
<ClCompile Include="src\1_ContainsNearbyDuplicate.cpp" /> | <ClCompile Include="src\1_ContainsNearbyDuplicate.cpp" /> | ||||
<ClCompile Include="src\20_MoveZeroes.cpp" /> | <ClCompile Include="src\20_MoveZeroes.cpp" /> | ||||
<ClCompile Include="src\21_Reverse.cpp" /> | <ClCompile Include="src\21_Reverse.cpp" /> | ||||
<ClCompile Include="src\22_Rotate.cpp" /> | |||||
<ClCompile Include="src\2_ExcelSheetColumnTitle.cpp" /> | <ClCompile Include="src\2_ExcelSheetColumnTitle.cpp" /> | ||||
<ClCompile Include="src\3_bool IsUgly.cpp" /> | <ClCompile Include="src\3_bool IsUgly.cpp" /> | ||||
<ClCompile Include="src\4_IsPalindrome.cpp" /> | <ClCompile Include="src\4_IsPalindrome.cpp" /> | ||||
@@ -176,6 +177,7 @@ | |||||
<ClInclude Include="include\1_ContainsNearbyDuplicate.h" /> | <ClInclude Include="include\1_ContainsNearbyDuplicate.h" /> | ||||
<ClInclude Include="include\20_MoveZeroes.h" /> | <ClInclude Include="include\20_MoveZeroes.h" /> | ||||
<ClInclude Include="include\21_Reverse.h" /> | <ClInclude Include="include\21_Reverse.h" /> | ||||
<ClInclude Include="include\22_Rotate.h" /> | |||||
<ClInclude Include="include\2_ExcelSheetColumnTitle.h" /> | <ClInclude Include="include\2_ExcelSheetColumnTitle.h" /> | ||||
<ClInclude Include="include\3_bool IsUgly.h" /> | <ClInclude Include="include\3_bool IsUgly.h" /> | ||||
<ClInclude Include="include\4_IsPalindrome.h" /> | <ClInclude Include="include\4_IsPalindrome.h" /> | ||||
@@ -198,6 +200,7 @@ | |||||
<None Include="config\1_ContainsNearbyDuplicate.ini" /> | <None Include="config\1_ContainsNearbyDuplicate.ini" /> | ||||
<None Include="config\20_MoveZeroes.ini" /> | <None Include="config\20_MoveZeroes.ini" /> | ||||
<None Include="config\21_Reverse.ini" /> | <None Include="config\21_Reverse.ini" /> | ||||
<None Include="config\22_Rotate.ini" /> | |||||
<None Include="config\2_ExcelSheetColumnTiTle.ini" /> | <None Include="config\2_ExcelSheetColumnTiTle.ini" /> | ||||
<None Include="config\3_bool IsUgly.ini" /> | <None Include="config\3_bool IsUgly.ini" /> | ||||
<None Include="config\4_IsPalindrome.ini" /> | <None Include="config\4_IsPalindrome.ini" /> | ||||
@@ -87,6 +87,9 @@ | |||||
<ClCompile Include="src\21_Reverse.cpp"> | <ClCompile Include="src\21_Reverse.cpp"> | ||||
<Filter>源文件\src</Filter> | <Filter>源文件\src</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="src\22_Rotate.cpp"> | |||||
<Filter>源文件\src</Filter> | |||||
</ClCompile> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ClInclude Include="include\2_ExcelSheetColumnTitle.h"> | <ClInclude Include="include\2_ExcelSheetColumnTitle.h"> | ||||
@@ -149,6 +152,9 @@ | |||||
<ClInclude Include="include\21_Reverse.h"> | <ClInclude Include="include\21_Reverse.h"> | ||||
<Filter>头文件\include</Filter> | <Filter>头文件\include</Filter> | ||||
</ClInclude> | </ClInclude> | ||||
<ClInclude Include="include\22_Rotate.h"> | |||||
<Filter>头文件\include</Filter> | |||||
</ClInclude> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="config\3_bool IsUgly.ini"> | <None Include="config\3_bool IsUgly.ini"> | ||||
@@ -211,5 +217,8 @@ | |||||
<None Include="config\21_Reverse.ini"> | <None Include="config\21_Reverse.ini"> | ||||
<Filter>资源文件\config</Filter> | <Filter>资源文件\config</Filter> | ||||
</None> | </None> | ||||
<None Include="config\22_Rotate.ini"> | |||||
<Filter>资源文件\config</Filter> | |||||
</None> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -0,0 +1,36 @@ | |||||
[Test1] | |||||
Input=1,2,3,4,5,6,7 | |||||
k=3 | |||||
Output=5,6,7,1,2,3,4 | |||||
[Test2] | |||||
Input=1,2,3,4,5,6,7 | |||||
k=2 | |||||
Output=6,7,1,2,3,4,5 | |||||
[Test3] | |||||
Input=1,2,3,4,5,6 | |||||
k=2 | |||||
Output=5,6,1,2,3,4 | |||||
[Test4] | |||||
Input=1,2,3,4,5,6 | |||||
k=3 | |||||
Output=4,5,6,1,2,3 | |||||
[Test5] | |||||
Input=1,2,3,4,5,6 | |||||
k=1 | |||||
Output=6,1,2,3,4,5 | |||||
[Test6] | |||||
Input=1,2,3,4,5,6 | |||||
k=7 | |||||
Output=6,1,2,3,4,5 | |||||
[Test7] | |||||
Input=-1,-100,3,99 | |||||
k=2 | |||||
Output=3,99,-1,-100 | |||||
[Test8] | |||||
Input=-1,-100,3,99 | |||||
k=4 | |||||
Output=-1,-100,3,99 | |||||
[Test9] | |||||
Input=1,2 | |||||
k=1 | |||||
Output=2,1 |
@@ -0,0 +1,6 @@ | |||||
#pragma once | |||||
#include<stdio.h> | |||||
#include<stdlib.h> | |||||
void Rotate1(int* nums, int numsSize, int k); | |||||
void Rotate2(int* nums, int numsSize, int k); | |||||
void Rotate3(int* nums, int numsSize, int k); |
@@ -0,0 +1,57 @@ | |||||
#include "../include/22_Rotate.h" | |||||
//题目:给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。 | |||||
//方法一:创建一个新的数组,把每个元素按照需要移动的位置,依次放到存放到新的数组中。 | |||||
void Rotate1(int* nums, int numsSize, int k) { | |||||
int* cpynums=(int *)malloc(sizeof(int) * numsSize); //开辟新的数组 | |||||
for (int i = 0; i < numsSize; i++) { //i从0开始,当i和numsSize相等时结束 | |||||
cpynums[(i+k)%numsSize] = nums[i]; //从nums数组的第一个数到最后一个数依次放到新数组的第i+k的位置 | |||||
} | |||||
for (int i = 0; i < numsSize; i++) { //把移动完成的数组拷贝给原数组 | |||||
nums[i] = cpynums[i]; | |||||
} | |||||
} | |||||
//方法二使用到的数组逆置函数,功能是逆置数组中指定连续元素 | |||||
void reverse(int* nums, int start, int end) { | |||||
int temp = 0; | |||||
while (start < end) { | |||||
temp = nums[start]; | |||||
nums[start] = nums[end]; | |||||
nums[end] = temp; | |||||
start++; | |||||
end--; | |||||
} | |||||
} | |||||
//方法二:先把整个数组逆置,再把0到k-1逆置,再把k到numsSize-1逆置,得到翻转后的数组 | |||||
void Rotate2(int* nums, int numsSize, int k) { | |||||
k = k % numsSize; | |||||
reverse(nums, 0, numsSize - 1); | |||||
reverse(nums, 0, k - 1); | |||||
reverse(nums, k ,numsSize - 1); | |||||
for (int i = 0; i < numsSize; i++) { //把移动完成的数组拷贝给原数组 | |||||
printf("%d ", nums[i]); | |||||
} | |||||
} | |||||
//方法三:环装替换法 | |||||
//1,直接遍历数组,将当前位置的值替换到被替换的位置,被替换位置的值保存在变量change中,进行下一次替换 | |||||
//2,但是如果 numsSize 正好是 k 的倍数时,就会出现循环处理相同位置的数据 | |||||
//3,因此每个遇到循环之后需要加1,进行下一个位置的移动 | |||||
void Rotate3(int* nums, int numsSize, int k) { | |||||
int count = 0; //用来计算访问元素的次数,最多为numsSize次 | |||||
for (int i = 0; count < numsSize; i++) { //i的作用:当numsSize为k的倍数,循环处理相同位置数据时,把待处理的数据移动到下一位置 | |||||
int temp = 0; //临时变量,交换数据时用 | |||||
int change = nums[i]; //存放第一个需要替换的值 | |||||
do | |||||
{ | |||||
count++; //count实际从1开始的 | |||||
temp = change; //交换当前位置的值和要被替换位置的值,被替换位置的值继续保存在change中,准备下一次替换 | |||||
change = nums[(k * count + i) % numsSize]; | |||||
nums[(k * count + i) % numsSize] = temp; | |||||
if ((count * k)%numsSize == 0) //当numsSize 正好是 k 的倍数时,跳出循环, | |||||
break; | |||||
} while (count != numsSize); //如果count和numsSize相等,说明该结束了 | |||||
} | |||||
} |
@@ -1,11 +1,9 @@ | |||||
#include<stdio.h> | #include<stdio.h> | ||||
#include "../include/21_Reverse.h" | |||||
#include "../include/22_Rotate.h" | |||||
int main() | int main() | ||||
{ | { | ||||
printf("%d ",Reverse(214748364)); | |||||
int arr[] = { 1,2,3,4,5,6,7}; | |||||
Rotate3(arr, 7,3); | |||||
} | } |
@@ -22,6 +22,7 @@ using namespace Microsoft::VisualStudio::CppUnitTestFramework; | |||||
#define FileName_19 "../Alogrithm/config/19_MySqrt.ini" | #define FileName_19 "../Alogrithm/config/19_MySqrt.ini" | ||||
#define FileName_20 "../Alogrithm/config/20_MoveZeroes.ini" | #define FileName_20 "../Alogrithm/config/20_MoveZeroes.ini" | ||||
#define FileName_21 "../Alogrithm/config/21_Reverse.ini" | #define FileName_21 "../Alogrithm/config/21_Reverse.ini" | ||||
#define FileName_22 "../Alogrithm/config/22_Rotate.ini" | |||||
namespace UnitTest | namespace UnitTest | ||||
{ | { | ||||
@@ -387,4 +388,27 @@ namespace UnitTest | |||||
} | } | ||||
} | } | ||||
}; | }; | ||||
TEST_CLASS(UnitTest_22) | |||||
{ | |||||
TEST_METHOD(TestMethode1) | |||||
{ | |||||
char Section_Name[100][10] = { 0 }; | |||||
int Section_Count = CalcCount(100, Section_Name, FileName_22); | |||||
int input_count = 0, output_count = 0, returnSize = 0; | |||||
int* input_value; | |||||
int* output_value; | |||||
CString input, output,k; | |||||
for (int i = 0; i < Section_Count; i++) { | |||||
GetPrivateProfileString(Section_Name[i], "Input", " ", input.GetBuffer(200), 200, FileName_22); | |||||
GetPrivateProfileString(Section_Name[i], "k", " ", k.GetBuffer(20), 20, FileName_22); | |||||
GetPrivateProfileString(Section_Name[i], "Output", " ", output.GetBuffer(200), 200, FileName_22); | |||||
input_value = str_device(input, &input_count); | |||||
output_value = str_device(output, &output_count); | |||||
Rotate1(input_value, input_count, _ttoi(k)); | |||||
for (int i = 0; i < input_count; i++) { | |||||
Assert::AreEqual(input_value[i], output_value[i]); | |||||
} | |||||
} | |||||
} | |||||
}; | |||||
} | } |
@@ -103,7 +103,7 @@ | |||||
<SubSystem>Windows</SubSystem> | <SubSystem>Windows</SubSystem> | ||||
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
<GenerateDebugInformation>DebugFull</GenerateDebugInformation> | <GenerateDebugInformation>DebugFull</GenerateDebugInformation> | ||||
<AdditionalDependencies>../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;../Alogrithm/Debug/18_PlusOne.obj;../Alogrithm/Debug/19_MySqrt.obj;../Alogrithm/Debug/20_MoveZeroes.obj;../Alogrithm/Debug/21_Reverse.obj;%(AdditionalDependencies)</AdditionalDependencies> | |||||
<AdditionalDependencies>../Alogrithm/Debug/1_ContainsNearbyDuplicate.obj;../Alogrithm/Debug/2_ExcelSheetColumnTitle.obj;../Alogrithm/Debug/3_bool IsUgly.obj;../Alogrithm/Debug/4_IsPalindrome.obj;../Alogrithm/Debug/5_MinDepth.obj;../Alogrithm/Debug/6_ContainsDuplicate.obj;../Alogrithm/Debug/7_MaxDepth.obj;../Alogrithm/Debug/8_HammingWeight.obj;../Alogrithm/Debug/9_AddBinary.obj;../Alogrithm/Debug/10_BinaryTreePaths.obj;../Alogrithm/Debug/11_CanWinNim.obj;../Alogrithm/Debug/12_IsValid.obj;../Alogrithm/Debug/13_MyAtoi.obj;../Alogrithm/Debug/14_SingleNumber.obj;../Alogrithm/Debug/15_WordPattern.obj;../Alogrithm/Debug/16_ReverseBits.obj;../Alogrithm/Debug/18_PlusOne.obj;../Alogrithm/Debug/19_MySqrt.obj;../Alogrithm/Debug/20_MoveZeroes.obj;../Alogrithm/Debug/21_Reverse.obj;../Alogrithm/Debug/22_Rotate.obj;%(AdditionalDependencies)</AdditionalDependencies> | |||||
</Link> | </Link> | ||||
</ItemDefinitionGroup> | </ItemDefinitionGroup> | ||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
@@ -33,6 +33,7 @@ | |||||
#include"../Alogrithm/include/19_MySqrt.h" | #include"../Alogrithm/include/19_MySqrt.h" | ||||
#include"../Alogrithm/include/20_MoveZeroes.h" | #include"../Alogrithm/include/20_MoveZeroes.h" | ||||
#include"../Alogrithm/include/21_Reverse.h" | #include"../Alogrithm/include/21_Reverse.h" | ||||
#include"../Alogrithm/include/22_Rotate.h" | |||||
int CalcCount(int n, char(*str)[10],const char *FileName); | int CalcCount(int n, char(*str)[10],const char *FileName); | ||||