20250216力扣每日一题

知识点
- 无
解题思路
题解思路
- 逆向遍历数组,定义一个新数组用来存储赋值后的数组
- 从后遍历数组
- 最后一个元素的值为
-1
- 前面的所有元素的值为
ans[i] = max(ans[i + 1], arr[i + 1])
,这样的方法当在arr
数组中遇到更大的元素之后,可以及时的更新
- 最后一个元素的值为
我的思路
- 正向遍历数组,定义两个指针
i
和j
,i
用来指向当前已遍历到的元素 - 从
i + 1
到数组末尾的范围内查找最大元素val
,并将其下标存入index
内- 事实证明,如果从
i
开始找,如果找到的元素是数组中最大的元素,那么会陷入死循环
- 事实证明,如果从
- 从
i
到index
,将所有的值赋值为val
- 重复上述过程
实现代码
题解代码
class Solution {
public:
vector<int> replaceElements(vector<int>& arr) {
int n = arr.size();
vector<int> ans(n);
ans[n - 1] = -1;
for(int i = n - 2; i >= 0; i --){
ans[i] = max(ans[i + 1], arr[i + 1]);
}
return ans;
}
};
我的代码
class Solution {
public:
vector<int> replaceElements(vector<int>& arr) {
int n = arr.size();
for(int i = 0; i < n - 1; i ++){
auto it = max_element(arr.begin() + i + 1, arr.end());
int index = it - arr.begin();
int val = *it;
cout << "test1" << endl;
for(int j = i; j < index; j ++){
arr[j] = val;
}
i = index - 1;
}
arr[n - 1] = - 1;
return arr;
}
};
Enjoy Reading This Article?
Here are some more articles you might like to read next: