题解

此题看似很简单,实则需要考虑的分支条件还是挺复杂的。
考察这么一个序列 a b c
b > c

  • b 的索引为 0,则可令 b 为 MIN_INT,这样 b 才不会对后面产生影响
  • b 的索引不为 0
    • a <= c ,因为 a < b ,所以只需将 b 设为 a 即可
    • a > c ,则需要将 c 设为 b 即可

      代码

      1. var checkPossibility = function(nums) {
      2. let n = 0
      3. for (let i = 0; i < nums.length - 1; i++) {
      4. if (nums[i] > nums[i+1]) {
      5. if (i === 0) {
      6. nums[i] = -1e5
      7. n++
      8. } else {
      9. if (nums[i-1] > nums[i+1]) {
      10. nums[i+1] = nums[i]
      11. } else {
      12. nums[i] = nums[i-1]
      13. }
      14. n++
      15. }
      16. if (n > 1) return false
      17. }
      18. }
      19. return true
      20. };