977.有序陣列的平方 ,209.長度最小的子陣列 ,59.螺旋矩陣II

晴夜空發表於2024-06-22

977.有序陣列的平方 ,209.長度最小的子陣列 ,59.螺旋矩陣II

977.有序陣列的平方

題目連結 : 977. 有序陣列的平方 - 力扣(LeetCode)

程式碼 :

class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {

//int length = end(nums) - begin(nums);
int length = nums.size();

int ptr_Left;
int ptr_Right;

vector<int> array_Receive(length);

int ptr_ArrayReceive ;

ptr_Left = 0;
ptr_Right = length - 1;

ptr_ArrayReceive = length - 1 ; // 平方 和 陣列 從 最大值 側 開始 放

while(ptr_Left <= ptr_Right)
{
// 注意 這裡 需要 比較 的 是 “絕對值”

if(abs(nums[ptr_Left])>= abs(nums[ptr_Right]))
{
array_Receive[ptr_ArrayReceive] = ( nums[ptr_Left] * nums[ptr_Left] );
ptr_ArrayReceive--;

ptr_Left++;

}
else
{
array_Receive[ptr_ArrayReceive] = ( nums[ptr_Right] * nums[ptr_Right] );
ptr_ArrayReceive--;

ptr_Right--;

}



}

return array_Receive;


}
};

209.長度最小的子陣列

題目連結 : 209. 長度最小的子陣列 - 力扣(LeetCode)

程式碼 :

class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int length = nums.size();

int ptr_Front ;
int ptr_Back ;

int countLength;

int MinLength;

int sum_Temp = 0;

int sum_Next_Temp;

ptr_Front = 0;
ptr_Back = 0;


countLength = 0;


while( ptr_Front < length && sum_Temp < target )
{
sum_Temp += nums[ptr_Front];

ptr_Front++;
countLength++;

}

// 邊界 考慮

if(sum_Temp < target )
{
return 0;

}

MinLength = countLength;


// 在 這 道 題 中 首次 處理 跟隨 的 縮短 長度 的 處理

//////////////////////////////////////

sum_Next_Temp = sum_Temp;

// 列印 測試

do
{
// 注意 邊界 考慮

sum_Temp = sum_Next_Temp;

sum_Next_Temp = sum_Temp - nums[ptr_Back] ;

if(sum_Next_Temp >= target)
{
ptr_Back++;
countLength--;

if(countLength < MinLength)
{
MinLength = countLength;

}

}

}while(sum_Next_Temp >= target );




//////////////////////////////////////



while(ptr_Front < length )
{
// 列印 測試

// “ 向 右 新增 一格 ”
// “ 發展 ”
//“類 回溯 法”
sum_Temp += nums[ptr_Front];
ptr_Front++;

countLength++;

//從 左側 嘗試 縮短 長度

sum_Next_Temp = sum_Temp;

// 列印 測試

do
{
// 注意 邊界 考慮

sum_Temp = sum_Next_Temp;

sum_Next_Temp = sum_Temp - nums[ptr_Back] ;

if(sum_Next_Temp >= target)
{
ptr_Back++;
countLength--;

if(countLength < MinLength)
{
MinLength = countLength;

}

}

}while(sum_Next_Temp >= target );

// 測試 時 對 溢位 情況 的 分析 ,/ “ 相關 分析 ”

// “ 可靠性 處理 ” , 健壯 性 處理


}

return MinLength;


}
};

59.螺旋矩陣II

題目連結 : 59. 螺旋矩陣 II - 力扣(LeetCode)

程式碼 :

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {

vector<vector<int>> array_TwoDimention_Receive( n , vector<int>(n) );

int worker_Outer_Thickness = n ;

int padding_Thickness = 0;

int i;
int j;

// 變數 初始化

int num_Accumulate ;

i = 0;
j = 0;

num_Accumulate = 1;

if(n == 1)
{
array_TwoDimention_Receive[0][0] = 1 ;

return array_TwoDimention_Receive;

}

while(worker_Outer_Thickness > 1)
{
for(; j < (n - padding_Thickness) - 1 ; j++ )
{
array_TwoDimention_Receive[i][j] = num_Accumulate ;
num_Accumulate ++ ;


}

for(; i < (n - padding_Thickness) - 1 ; i++ )
{
array_TwoDimention_Receive[i][j] = num_Accumulate ;
num_Accumulate ++ ;

}

for(; j > padding_Thickness ; j-- )
{
array_TwoDimention_Receive[i][j] = num_Accumulate ;
num_Accumulate ++ ;

}

for(; i > padding_Thickness ; i-- )
{
array_TwoDimention_Receive[i][j] = num_Accumulate ;
num_Accumulate ++ ;

}

// “ 變 向 ” / “ 變 向 操作 ”
i++;
j++;


worker_Outer_Thickness -= 2 ;

padding_Thickness += 1 ;

}

if(worker_Outer_Thickness == 1)
{
array_TwoDimention_Receive[i][j] = num_Accumulate ;
num_Accumulate ++ ;


}

return array_TwoDimention_Receive ;

}
};

相關文章