20250216力扣每日一题

知识点

解题思路

题解思路

  • 逆向遍历数组,定义一个新数组用来存储赋值后的数组
  • 从后遍历数组
    • 最后一个元素的值为-1
    • 前面的所有元素的值为ans[i] = max(ans[i + 1], arr[i + 1]),这样的方法当在arr数组中遇到更大的元素之后,可以及时的更新

我的思路

  • 正向遍历数组,定义两个指针iji用来指向当前已遍历到的元素
  • i + 1到数组末尾的范围内查找最大元素val,并将其下标存入index
    • 事实证明,如果从i开始找,如果找到的元素是数组中最大的元素,那么会陷入死循环
  • iindex,将所有的值赋值为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:

  • Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
  • Displaying External Posts on Your al-folio Blog
  • 强化学习导论
  • 企业项目实训
  • 面试总结