classSolution{public:intsearch(vector<int>& nums,int target){int l =0, r = nums.size()-1;while(l < r){int mid = l + r >>1;// 这里mid = l + r >> 1则必须使用nums[mid] >= target进行判断if(nums[mid]>= target) r = mid;// 符合第一种情况(acwing二分查找题)else l = mid +1;}if(nums[r]!= target)return-1;return r;}};
classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int res = INT_MAX;int sum =0;for(int i =0, j =0; i < nums.size(); i++){
sum += nums[i];while(sum - nums[j]>= target) sum -= nums[j++];// 减去当前的nums[j]if(sum >= target) res =min(res, i - j +1);// 这里必须是>=}if(res == INT_MAX) res =0;// 无解return res;}};
classSolution{public:
vector<vector<int>>generateMatrix(int n){// 初始化一个n行、n列,初始元素为0的二维数组
vector<vector<int>>res(n,vector<int>(n,0));// 右->下->左->上的顺序,而且x坐标是垂直向下,y坐标是水平向右int dx[]={0,1,0,-1}, dy[]={1,0,-1,0};// 当i = 1时,对应(x,y)是(0,0),d表示选择哪种模式,d=0,表示向右,d=1表示向下for(int i =1, x =0, y =0, d =0; i <= n*n; i++){
res[x][y]= i;// 坐标[x][y]int a = x + dx[d], b = y + dy[d];// a表示x坐标,b表示y坐标,最大值是n-1(从0开始)if(a <0|| a >= n || b <0|| b >= n || res[a][b])// 最后res[a][b]表示这个格子已经填了数{
d =(d +1)%4;// 更改方向
a = x + dx[d], b = y + dy[d];// 继续往下走}
x = a, y = b;// 更新a和b}return res;}};