classSolution { publicbooleancheckPossibility(int[] nums) { intn= nums.length; for (inti=0; i < n - 1; ++i) { intx= nums[i], y = nums[i + 1]; if (x > y) { nums[i] = y; if (isSorted(nums)) { returntrue; } nums[i] = x; // 复原 nums[i + 1] = x; return isSorted(nums); } } returntrue; }
publicbooleanisSorted(int[] nums) { intn= nums.length; for (inti=1; i < n; ++i) { if (nums[i - 1] > nums[i]) { returnfalse; } } returntrue; } }
[sol1-Golang]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
funccheckPossibility(nums []int)bool { for i := 0; i < len(nums)-1; i++ { x, y := nums[i], nums[i+1] if x > y { nums[i] = y if sort.IntsAreSorted(nums) { returntrue } nums[i] = x // 复原 nums[i+1] = x return sort.IntsAreSorted(nums) } } returntrue }
classSolution { public: boolcheckPossibility(vector<int> &nums){ int n = nums.size(), cnt = 0; for (int i = 0; i < n - 1; ++i) { int x = nums[i], y = nums[i + 1]; if (x > y) { cnt++; if (cnt > 1) { returnfalse; } if (i > 0 && y < nums[i - 1]) { nums[i + 1] = x; } } } returntrue; } };
[sol2-Java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
classSolution { publicbooleancheckPossibility(int[] nums) { intn= nums.length, cnt = 0; for (inti=0; i < n - 1; ++i) { intx= nums[i], y = nums[i + 1]; if (x > y) { cnt++; if (cnt > 1) { returnfalse; } if (i > 0 && y < nums[i - 1]) { nums[i + 1] = x; } } } returntrue; } }
[sol2-Golang]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
funccheckPossibility(nums []int)bool { cnt := 0 for i := 0; i < len(nums)-1; i++ { x, y := nums[i], nums[i+1] if x > y { cnt++ if cnt > 1 { returnfalse } if i > 0 && y < nums[i-1] { nums[i+1] = x } } } returntrue }
[sol2-JavaScript]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var checkPossibility = function(nums) { const n = nums.length; let cnt = 0; for (let i = 0; i < n - 1; ++i) { const x = nums[i], y = nums[i + 1]; if (x > y) { cnt++; if (cnt > 1) { returnfalse; } if (i > 0 && y < nums[i - 1]) { nums[i + 1] = x; } } } returntrue; };
[sol2-C]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
boolcheckPossibility(int* nums, int numsSize) { int cnt = 0; for (int i = 0; i < numsSize - 1; ++i) { int x = nums[i], y = nums[i + 1]; if (x > y) { cnt++; if (cnt > 1) { returnfalse; } if (i > 0 && y < nums[i - 1]) { nums[i + 1] = x; } } } returntrue; }