Leetcode 977 有序数组的平方
题目链接:有序数组的平方
Solution:
- 暴力排序
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i = 0; i < nums.size(); i++)
{
nums[i] = nums[i] * nums[i];
}
sort(nums.begin(), nums.end());
return nums;
}
};
- 双指针法
因为是有序的数组,所以两端的值一定大于中间的值,所以首尾两个指针向中间逼近。 空间换时间,将两端的值进行比较,较大的放入新的数组,新的数组从最大值开始填充。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(), 0);
int lelt = 0;
int right = nums.size() - 1;
int k = nums.size() - 1;
while(left <= right)
{
if(nums[left] * nums[left] > nums[right] * nums[right])
{
result[k] = nums[left] * nums[left];
k--;
left++;
}
else
{
result[k] = nums[right] * nums[right];
k--;
right--;
}
}
return result;
}
};
Leetcode 209 长度最小的子数组
题目链接:长度最小的子数组
Solution:
- 暴力破解
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int length = 0;
int sum = 0
int result = INT32_MAX;
for(int i = 0; i < nums.size(); i++)
{
sum = 0;
for(int j = i; j < nums.size(); j++)
{
sum += nums[j];
if(sum >= target)
{
length = j - i + 1;
result = (result < length) ? result : length;
break;
}
}
}
return result == INT32_MAX ? 0:result;
}
};
- 滑动窗口
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX;
int sum = 0;
int i = 0;
int subLength = 0;
for (int j = 0; j < nums.size(); j++) {
sum += nums[j];
while (sum >= target) {
subLength = (j - i + 1);
result = result < subLength ? result : subLength;
sum -= nums[i++];
}
}
return result == INT32_MAX ? 0 : result;
}
};