diff --git a/.gitignore b/.gitignore index 9d51f36..0d2594d 100644 --- a/.gitignore +++ b/.gitignore @@ -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/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/.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 diff --git a/Alogrithm/.vs/Alogrithm/v16/.suo b/Alogrithm/.vs/Alogrithm/v16/.suo index 2ef4303..f8ee011 100644 Binary files a/Alogrithm/.vs/Alogrithm/v16/.suo and b/Alogrithm/.vs/Alogrithm/v16/.suo differ diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj b/Alogrithm/Alogrithm/Alogrithm.vcxproj index e874e1f..06841ac 100644 --- a/Alogrithm/Alogrithm/Alogrithm.vcxproj +++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj @@ -153,6 +153,7 @@ + @@ -176,6 +177,7 @@ + @@ -198,6 +200,7 @@ + diff --git a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters index ff3e4de..468f922 100644 --- a/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters +++ b/Alogrithm/Alogrithm/Alogrithm.vcxproj.filters @@ -87,6 +87,9 @@ 源文件\src + + 源文件\src + @@ -149,6 +152,9 @@ 头文件\include + + 头文件\include + @@ -211,5 +217,8 @@ 资源文件\config + + 资源文件\config + \ No newline at end of file diff --git a/Alogrithm/Alogrithm/config/22_Rotate.ini b/Alogrithm/Alogrithm/config/22_Rotate.ini new file mode 100644 index 0000000..b77655e --- /dev/null +++ b/Alogrithm/Alogrithm/config/22_Rotate.ini @@ -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 diff --git a/Alogrithm/Alogrithm/include/22_Rotate.h b/Alogrithm/Alogrithm/include/22_Rotate.h new file mode 100644 index 0000000..1a39445 --- /dev/null +++ b/Alogrithm/Alogrithm/include/22_Rotate.h @@ -0,0 +1,6 @@ +#pragma once +#include +#include +void Rotate1(int* nums, int numsSize, int k); +void Rotate2(int* nums, int numsSize, int k); +void Rotate3(int* nums, int numsSize, int k); \ No newline at end of file diff --git a/Alogrithm/Alogrithm/src/22_Rotate.cpp b/Alogrithm/Alogrithm/src/22_Rotate.cpp new file mode 100644 index 0000000..cf5dbd3 --- /dev/null +++ b/Alogrithm/Alogrithm/src/22_Rotate.cpp @@ -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++) { //i0ʼinumsSizeʱ + 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--; + } +} +//Ȱãٰ0k-1ãٰknumsSize-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); //countnumsSizeȣ˵ý + } +} \ No newline at end of file diff --git a/Alogrithm/Alogrithm/src/main.cpp b/Alogrithm/Alogrithm/src/main.cpp index 5b673de..e9e0524 100644 --- a/Alogrithm/Alogrithm/src/main.cpp +++ b/Alogrithm/Alogrithm/src/main.cpp @@ -1,11 +1,9 @@ #include -#include "../include/21_Reverse.h" +#include "../include/22_Rotate.h" int main() { - - printf("%d ",Reverse(214748364)); - - + int arr[] = { 1,2,3,4,5,6,7}; + Rotate3(arr, 7,3); } diff --git a/Alogrithm/UnitTest/UnitTest.cpp b/Alogrithm/UnitTest/UnitTest.cpp index f3ee58f..f5c4ab6 100644 --- a/Alogrithm/UnitTest/UnitTest.cpp +++ b/Alogrithm/UnitTest/UnitTest.cpp @@ -22,6 +22,7 @@ using namespace Microsoft::VisualStudio::CppUnitTestFramework; #define FileName_19 "../Alogrithm/config/19_MySqrt.ini" #define FileName_20 "../Alogrithm/config/20_MoveZeroes.ini" #define FileName_21 "../Alogrithm/config/21_Reverse.ini" +#define FileName_22 "../Alogrithm/config/22_Rotate.ini" 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]); + } + } + } + }; } diff --git a/Alogrithm/UnitTest/UnitTest.vcxproj b/Alogrithm/UnitTest/UnitTest.vcxproj index 9b3db92..b1ba7a6 100644 --- a/Alogrithm/UnitTest/UnitTest.vcxproj +++ b/Alogrithm/UnitTest/UnitTest.vcxproj @@ -103,7 +103,7 @@ Windows $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) DebugFull - ../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) + ../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) diff --git a/Alogrithm/UnitTest/pch.h b/Alogrithm/UnitTest/pch.h index 160e994..290700f 100644 --- a/Alogrithm/UnitTest/pch.h +++ b/Alogrithm/UnitTest/pch.h @@ -33,6 +33,7 @@ #include"../Alogrithm/include/19_MySqrt.h" #include"../Alogrithm/include/20_MoveZeroes.h" #include"../Alogrithm/include/21_Reverse.h" +#include"../Alogrithm/include/22_Rotate.h" int CalcCount(int n, char(*str)[10],const char *FileName);