给一整数数组, 用当前元素之后数组中的最大元素来替换当前元素(右侧的最大元素). 因为最后一个元素的右边没有元素了, 所以用 -1
来替换这个值. 举个例子, 如果数组为 [16,17,4,3,5,2]
, 那么它就需要修改为 [17,5,5,5,2,-1]
.
样例
给出数组 nums = [16,17,4,3,5,2]
, 改变数组为 [17,5,5,5,2,-1]
, 你需要在原地实现。
没有什么骚操作,就是很普通的找当前右边最大值然后替换,第一次交就过了
1 void arrayReplaceWithGreatestFromRight(vector<int> &nums) { 2 // Write your code here. 3 int i=0, j; 4 int max_index; 5 while(i<nums.size()){ 6 j=i+1; 7 max_index=i; 8 while(j<nums.size()){//找当前右边最大值 9 if(nums[j]>nums[max_index]){ 10 max_index=j; 11 } 12 j++; 13 } 14 while(i<max_index){//找到后存到max_index,然后替换 15 nums[i]=nums[max_index]; 16 i++; 17 } 18 nums[i]=INT_MIN; 19 if(max_index==nums.size()-1){ 20 nums[max_index]=-1; 21 break; 22 } 23 } 24 }
然后看了一眼别人的答案,发现我这个真的是老实人的顺序做法
聪明的直接逆序,max初始化为最后,逆着覆盖过去,如果有比max大的,update max。
这样效率高得多,我这个解法还多一个找局部最大的过程。