classSolution{public:vector<int>sortTransformedArray(vector<int>&nums,inta,intb,intc){constintn=nums.size();constboolupward=a>0;vector<int>ans(n);vector<int>quad;for(constintnum:nums)quad.push_back(f(num,a,b,c));inti=upward?n-1:0;for(intl=0,r=n-1;l<=r;)if(upward)// Maximum in both endsans[i--]=quad[l]>quad[r]?quad[l++]:quad[r--];else// Minimum in both endsans[i++]=quad[l]<quad[r]?quad[l++]:quad[r--];returnans;}private:// The concavity of f only depends on a's signintf(intx,inta,intb,intc){return(a*x+b)*x+c;}};
classSolution{publicint[]sortTransformedArray(int[]nums,inta,intb,intc){finalintn=nums.length;finalbooleanupward=a>0;int[]ans=newint[n];int[]quad=newint[n];for(inti=0;i<nums.length;++i)quad[i]=f(nums[i],a,b,c);inti=upward?n-1:0;for(intl=0,r=n-1;l<=r;)if(upward)// Maximum in both endsans[i--]=quad[l]>quad[r]?quad[l++]:quad[r--];else// Minimum in both endsans[i++]=quad[l]<quad[r]?quad[l++]:quad[r--];returnans;}// The concavity of f only depends on a's signprivateintf(intx,inta,intb,intc){return(a*x+b)*x+c;}}
classSolution:defsortTransformedArray(self,nums:List[int],a:int,b:int,c:int)->List[int]:n=len(nums)upward=a>0ans=[0]*n# The concavity of f only depends on a's signdeff(x:int,a:int,b:int,c:int)->int:return(a*x+b)*x+cquad=[f(num,a,b,c)fornuminnums]i=n-1ifupwardelse0l=0r=n-1whilel<=r:ifupward:# Maximum in both endsifquad[l]>quad[r]:ans[i]=quad[l]l+=1else:ans[i]=quad[r]r-=1i-=1else:# Minimum in both endsifquad[l]<quad[r]:ans[i]=quad[l]l+=1else:ans[i]=quad[r]r-=1i+=1returnans