株洲市网站建设_网站建设公司_H5网站_seo优化
2026/1/2 0:05:45 网站建设 项目流程

关于二维vector:
vector<vector> a(n,vector(n) );//n行n列(n为输入变量)
vector<vector> a(n,vector() );//n行,不指定列数
但是数组不支持变长:
const int N=n; int a[N][N];//错误
const int N=100;int a[N][N];//可以

1.长度最小的子数组
找出该数组中满足其总和大于等于 target 的长度最小的子数组(连续)
思路:双指针

点击查看代码
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n=nums.size();int l=0,r=0;int sum=0,minn=n+1;while(1){while(r<n&&sum<target){sum+=nums[r];r++;}if(sum>=target)minn=min(minn,r-l);if(r>=n&&sum<target)break;sum-=nums[l];l++;}if(minn<n+1)return minn;return 0;}
};

2.螺旋矩阵
本题是n* n,n*m类似

点击查看代码
class Solution {
public:vector<vector<int>> generateMatrix(int n) {int l=0,r=n-1,u=0,d=n-1;int id=1,te;vector<vector<int>> a(n,vector<int>(n) );//n行n列while(id<=n*n){te=l;while(l<=r&&te<=r)a[u][te++]=id++;u++;te=u;while(r>=l&&te<=d)a[te++][r]=id++;r--;te=r;while(d>=u&&te>=l)a[d][te--]=id++;d--;te=d;while(l<=r&&te>=u)a[te--][l]=id++;l++;}return a;}
};

3.开发商购买土地
描述:
n * m个连续的区块,每个区块都拥有不同的权值,代表着其土地价值。
现在,需要将这个城市区域的所有区块分配给 A 公司和 B 公司。
只允许将区域按横向或纵向划分成两个子区域,而且每个子区域都必须包含一个或多个区块。 为了确保公平竞争,你需要找到一种分配方式,使得 A 公司和 B 公司各自的子区域内的土地总价值之差最小。
思路:前缀和(前缀和一般下标从1开始,方便操作

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+10;void solve()
{int n,m;cin>>n>>m;vector<vector<int>>a(n+1,vector<int>(m+1));vector<int>r(n+1),c(m+1);for(int i=1;i<=n;i++){int sum=0;for(int j=1;j<=m;j++){cin>>a[i][j];sum+=a[i][j];r[i]=r[i-1]+sum;}}for(int i=1;i<=m;i++){int sum=0;for(int j=1;j<=n;j++){sum+=a[j][i];c[i]=c[i-1]+sum;}}int d=1e9;for(int i=1;i<n;i++){d=min(d,abs(r[n]-r[i]-r[i]));}for(int i=1;i<m;i++){d=min(d,abs(c[m]-c[i]-c[i]));}cout<<d<<'\n';
}
int main()
{ll T=1;// cin>>T;while(T--)solve();return 0;
}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询