209.长度最小的数组
题目链接:209. 长度最小的子数组 - 力扣(LeetCode)
//暴力解法
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result=INT_MAX;
int length=0;
for(int i=0;i<nums.size();i++){
int sum=0;
for(int j=i;j<nums.size();j++){
sum+=nums[j];
if(sum>=target){
length=j-i+1;
result=min(result,length);
break;
}
}
}
return result==INT_MAX?0:result;
}
};
这里最后返回的不是结果而是条件,
这里的滑动窗口算法思路应该是和暴力一样的,就是把i另外自己定义,还有在维持这个窗口的时候,应该是sum-=nums[i]去掉最左边数,而且不应该break,因为要反复找
class Solution {//错误写法
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum=0;
int result=INT_MAX;
int i=0;
for(int j=0;j<nums.size();j++){
sum+=nums[j];
while(sum>=target){
result=result>j-i+1?j-i+1:result;
sum-=nums[j];
i++;
break;
}
}
return result==INT_MAX?0:result;
}
};
class Solution {//正确写法
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum=0;
int result=INT_MAX;
int i=0;
for(int j=0;j<nums.size();j++){
sum+=nums[j];
while(sum>=target){
result=result>j-i+1?j-i+1:result;
sum-=nums[i];
i++;
}
}
return result==INT_MAX?0:result;
}
};
59.螺旋矩阵
题目链接:59. 螺旋矩阵 II - 力扣(LeetCode)
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector(n, 0));
int startx = 0, starty = 0;
int offset = n / 2;
int count = 1;
int loop = n / 2;
while (loop--) {
int i = startx;
int j = starty;
for (; j < n - offset; j++) {
res[i][j] = count++;
}
for (; i < n - offset; i++) {
res[i][j] = count++;
}
for (; j > starty; j--) {
res[i][j] = count++;
}
for (; i > startx; i--) {
res[i][j] = count++;
}
startx++;
starty++;
offset++;
}
if (n % 2 == 1) {
res[n / 2][n / 2] = count++;
}
return res;
}
};
58.区间和
题目链接:58. 区间和(第九期模拟笔试)
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, a, b, res, presum = 0;
cin >> n;
vector<int> vec(n, 0);
vector<int> p(n, 0);
for ( int i = 0; i < n; i++ ) {
cin >> vec[i];
presum += vec[i];
p[i] = presum;
}
while (cin >> a >> b){
if (a == 0) {
res = p[b];
}
else
res = p[b] - p[a-1];
cout << res << endl;
}
}
这道题我本来想直接用p[i]直接+=而不用presum,但是发现当i变化的时候p[i]也会变化所以需要一个临时变量记录前面的数的和所以需要presum。
44.开发商购买土地
题目链接:44. 开发商购买土地(第五期模拟笔试)
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main () {
int n, m, sum = 0, result = INT_MAX, count = 0;
cin >> n >> m;
vector<vector<int>> vec(n, vector<int>(m, 0));
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> vec[i][j];
sum += vec[i][j];
}
}
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
count += vec[i][j];
if (j == m - 1)
result = min(result, abs(sum - count - count));
}
}
count = 0;
for (int j = 0; j < m; j++){
for (int i = 0; i < n; i++){
count += vec[i][j];
if (i == n - 1)
result = min(result, abs(sum - count - count));
}
}
cout << result << endl;
}
笑死,又是经典的if条件里写等于
771

被折叠的 条评论
为什么被折叠?



