public List<Integer> findSwapedNum(List<Integer> list){ List<Integer> res = new ArrayList<>(); int a = -1, b = -1; for (int i = 0; i < list.size()-1; i++) { if (list.get(i+1) < list.get(i)) { b = list.get(i+1); if (a == -1) a = list.get(i); elsebreak; } } res.add(a); res.add(b); return res; }
/*解法二 one pass TimeO(n) Space O(1) @param: TreeNode @return: null Algorithm: one pass TimeO(n) Space O(1); 1. inOrder dfs把顺序找到,然后借助在array中找乱序两个元素思路,处理 2. 交换两个Node的val; */ TreeNode a, b; TreeNode prev; publicvoidrecoverTree(TreeNode root){ if (root == null) return; dfs(root); int temp = a.val; a.val = b.val; b.val = temp; }
publicvoiddfs(TreeNode root){ if (root == null) return; dfs(root.left); if (prev != null && root.val < prev.val) { b = root; if (a == null) a = prev; } prev = root; dfs(root.right); }