自己的思路:原本想着非递减数列只要数组最后一位是最小的,前面的数只要有两个比最后一位小,就无法变成非递减数列了。所以写下一段错误代码:

    1. public boolean solution(int[] nums) {
    2. int x=0 ;
    3. for(int i=0;i<nums.length;i++){
    4. if(nums[nums.length-1]<=nums[i]){
    5. x++;
    6. if(x>1){
    7. return false;
    8. }
    9. }
    10. }
    11. return true;
    12. }

    正确的思路:
    就直接写注释了

    1. class Solution {
    2. public boolean checkPossibility(int[] nums) {
    3. int n = nums.length, cnt = 0;
    4. for (int i = 0; i < n - 1; ++i) {
    5. int x = nums[i], y = nums[i + 1];
    6. if (x > y) {
    7. cnt++;
    8. if (cnt > 1) {
    9. return false;
    10. }
    11. if (i > 0 && y < nums[i - 1]) {
    12. nums[i + 1] = x;
    13. }
    14. }
    15. }
    16. return true;
    17. }
    18. }

    image.png
    image.pngimage.png