leetcode (Missing Number)
阿新 • • 發佈:2018-11-24
Title:Missing Number 268
Difficulty:Easy
原題leetcode地址:https://leetcode.com/problems/missing-number/
1. 申請了額外的空間,在新申請的空間中將nums重新排序,然後找到當前位置上的數與位置的值不同(類似於排序)
時間複雜度:O(n),兩次for迴圈,但都是一層,遍歷整個陣列的長度。
空間複雜度:O(n),申請一個n長度的陣列。
/** * 申請了額外的空間,在新申請的空間中將nums重新排序,然後找到當前位置上的數與位置的值不同 * @param nums * @return */ public static int missingNumber(int[] nums) { if (nums == null || nums.length <= 0) { return 0; } int n[] = new int[nums.length + 1]; for (int i = 0; i < nums.length; i++) { n[nums[i]] = nums[i]; } int flag = 0; for (int i = 1; i < n.length; i++) { if (n[i] == 0) { flag = i; } } return flag; }
2. 先計算0~n的和,再計算nums中數的和,最後相減就是結果
時間複雜度:O(n),一次一層for迴圈,遍歷整個陣列的長度。
空間複雜度:O(1),沒有申請額外的空間。
/** * 將0~n想加求和S1,再將nums中的想加求和S2,S1-S2就是最後的結果 * @param nums * @return */ public static int missingNumber1(int[] nums) { if (nums == null || nums.length <= 0) { return 0; } int result = nums.length; for (int i = 0; i < nums.length; i++) { result += i - nums[i]; } return result; }