版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hsx1612727380/article/details/84434185
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;
}