leetcode周赛373场
第三题2948题
评论区的解题思路找到了很好的解法,当时没有想到,给原始数组排序后,分段再给数组位置排序。
class Solution {public int[] lexicographicallySmallestArray(int[] nums, int limit) {int n = nums.length;Integer[] ids = new Integer[n];for(int i=0;i<n;i++)ids[i] = i;Arrays.sort(ids,(i,j)->nums[i]-nums[j]);for(int i=0;i<n;i++)System.out.println(ids[i]);int[] ans = new int[n];int i=0;while(i<n){int begin = i;i++;while(i<n&&nums[ids[i]]-nums[ids[i-1]]<=limit)i++;//Arrays.copyOfRange左闭右开区间Integer[] subIds = Arrays.copyOfRange(ids, begin, i);Arrays.sort(subIds);for(int j=0;j<subIds.length;j++)ans[subIds[j]] = nums[ids[begin+j]];}return ans;}
}