classSolution{public:vector<int>lexicographicallySmallestArray(vector<int>&nums,intlimit){vector<int>ans(nums.size());// [[(num, index)]], where the difference between in each pair in each// `[(num, index)]` group <= `limit`vector<vector<pair<int,int>>>numAndIndexesGroups;for(constpair<int,int>&numAndIndex:getNumAndIndexes(nums))if(numAndIndexesGroups.empty()||numAndIndex.first-numAndIndexesGroups.back().back().first>limit){// Start a new group.numAndIndexesGroups.push_back({numAndIndex});}else{// Append to the existing group.numAndIndexesGroups.back().push_back(numAndIndex);}for(constvector<pair<int,int>>&numAndIndexesGroup:numAndIndexesGroups){vector<int>sortedNums;vector<int>sortedIndices;for(constauto&[num,index]:numAndIndexesGroup){sortedNums.push_back(num);sortedIndices.push_back(index);}ranges::sort(sortedIndices);for(inti=0;i<sortedNums.size();++i)ans[sortedIndices[i]]=sortedNums[i];}returnans;}private:vector<pair<int,int>>getNumAndIndexes(constvector<int>&nums){vector<pair<int,int>>numAndIndexes;for(inti=0;i<nums.size();++i)numAndIndexes.emplace_back(nums[i],i);ranges::sort(numAndIndexes);returnnumAndIndexes;}};
classSolution{publicint[]lexicographicallySmallestArray(int[]nums,intlimit){int[]ans=newint[nums.length];List<List<Pair<Integer,Integer>>>numAndIndexesGroups=newArrayList<>();for(Pair<Integer,Integer>numAndIndex:getNumAndIndexes(nums))if(numAndIndexesGroups.isEmpty()||numAndIndex.getKey()-numAndIndexesGroups.get(numAndIndexesGroups.size()-1).get(numAndIndexesGroups.get(numAndIndexesGroups.size()-1).size()-1).getKey()>limit){// Start a new group.numAndIndexesGroups.add(newArrayList<>(List.of(numAndIndex)));}else{// Append to the existing group.numAndIndexesGroups.get(numAndIndexesGroups.size()-1).add(numAndIndex);}for(List<Pair<Integer,Integer>>numAndIndexesGroup:numAndIndexesGroups){List<Integer>sortedNums=newArrayList<>();List<Integer>sortedIndices=newArrayList<>();for(Pair<Integer,Integer>pair:numAndIndexesGroup){sortedNums.add(pair.getKey());sortedIndices.add(pair.getValue());}sortedIndices.sort(null);for(inti=0;i<sortedNums.size();++i){ans[sortedIndices.get(i)]=sortedNums.get(i);}}returnans;}privatePair<Integer,Integer>[]getNumAndIndexes(int[]nums){Pair<Integer,Integer>[]numAndIndexes=newPair[nums.length];for(inti=0;i<nums.length;++i)numAndIndexes[i]=newPair<>(nums[i],i);Arrays.sort(numAndIndexes,Comparator.comparing(Pair::getKey));returnnumAndIndexes;}}
classSolution:deflexicographicallySmallestArray(self,nums:list[int],limit:int,)->list[int]:ans=[0]*len(nums)numAndIndexes=sorted([(num,i)fori,numinenumerate(nums)])# [[(num, index)]], where the difference between in each pair in each# `[(num, index)]` group <= `limit`numAndIndexesGroups:list[list[tuple[int,int]]]=[]fornumAndIndexinnumAndIndexes:if(notnumAndIndexesGroupsornumAndIndex[0]-numAndIndexesGroups[-1][-1][0]>limit):# Start a new group.numAndIndexesGroups.append([numAndIndex])else:# Append to the existing group.numAndIndexesGroups[-1].append(numAndIndex)fornumAndIndexesGroupinnumAndIndexesGroups:sortedNums=[numfornum,_innumAndIndexesGroup]sortedIndices=sorted([indexfor_,indexinnumAndIndexesGroup])fornum,indexinzip(sortedNums,sortedIndices):ans[index]=numreturnans
Thanks for stopping by! If you find this site helpful, consider buying me some protein powder to keep me fueled! π