int n= nums.size();
vector<int> ans(n,0);
for (int i = 0,j=n-1,pos=n-1; i <=j; ) {
if (nums[i]*nums[i]>nums[j]*nums[j]){
ans[pos]=nums[i]*nums[i];
i++;
}else {
ans[pos]=nums[j]*nums[j];
j--;
}
pos--;
}
return ans;
}
/*//暴力求解
int len = nums.size();
int minimum=INT_MAX;
for(int i = 0; i < len; i++ ){
//此处未思考
int sum = nums[i];
if (sum >= target)
return 1;
for(int j = i + 1; j < len; j++){
sum += nums[j];
if(sum >= target){
minimum=min(minimum,j-i+1);
break;
}
}
}
return minimum==INT_MAX ? 0 : minimum;*/
//双指针 快慢指针
//双指针 快慢指针
/*int l = 0,r = 0,sum = 0,minimum = INT_MAX;
int len = nums.size();
while(r < len){
sum += nums[r++];
while(sum >= target){//此处应为循环 实现重复出入队列
minimum=min(minimum,r-l);
sum-=nums[l++];
}
}
return minimum==INT_MAX ? 0 : minimum;*/
//滑动窗口
/* //滑动窗口
int l=0, r= nums.size(), min=0;
while(l <= r){
int mid = (l+r) >> 1;//右移
if(windowExist(mid, nums, target)){
r=mid-1;
min =mid;
}else
l =mid + 1;//不满足条件 窗口过小 扩容
}
return min;*/
//二分查找
//二分查找
//Java函数 int index = Arrays.binarySearch(sums, target);如果找到就会返回值的下标,如果没找到就会返回一个负数,这个负数取反之后就是查找的值应该在数组中的位置 [1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;
//构造函数 int search(vector<int>& nums, int target)
int len=nums.size();
int minimum = INT_MAX;
vector<int> sums(len+1,0);
for (int i = 1; i <= len; ++i) {
sums[i]=sums[i-1]+nums[i-1];
}
for (int i = 0; i <= len; ++i) {
int index = search(sums,target+sums[i]);
if(index < 0){
minimum = minimum;
}else if(index <= len){
minimum=min(minimum,index-i);
}
}
return minimum == INT_MAX ? 0 : minimum;
}
int search(vector<int>& nums, int target) {
int len = nums.size();
int l = 0,r = len-1;
if(target > nums[r]){return -1;}//比右边界还大
while(l <= r){
int middle = (l+r)/2;
if(target < nums[middle]){
r = middle-1;
}else if(target>nums[middle]){
l = middle+1;
}else{
return middle;
}
}
return l;//vector不存在该元素 返回插入位置
}
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>ans(n, vector<int>(n, 0));
int tr=0,tc=0;
int dr=n-1,dc=n-1;
int index=1;
while (tr<=dr&&tc<=tr){
for (int col = tc; col <=dc; col++) {
ans[tr][col]=index++;
}
for (int row = tr+1; row <=dr ; row++) {
ans[row][dc]=index++;
}
if (tr<dr&&tc<dc){
for (int column = dc-1; column >tc; column--) {
ans[dr][column]=index++;
}
for (int row = dr; row >tr; row--) {
ans[row][tc]=index++;
}
}
tr++;dr--;
tc++;dc--;
}
return ans;
}