MissingNumber缺失的数字,FirstMissingPositive第一个缺失的正数

MissingNumber问题描述:给定一个数组,数组数字范围是0-n,找到缺失的数字。例如nums={0,1,3},return2。

算法分析:第一种方法,对数组进行排序,然后找到和下标不一致的数字,下标即为缺失的数字。第二种方法,对于这样的数组,如果没有缺失数字,即使没有排序,下标-数字的差相加为0.假设缺失的数字在nums.length位置,那么sum+nums.length - x = 0;

 1 public int missingNumber(int[] nums) {
 2         Arrays.sort(nums);
 3         for(int i = 0; i < nums.length; i ++)
 4         {
 5             if(nums[i] != i)
 6             {
 7                 return i;
 8             }
 9         }
10         return nums.length;
11     }
12
13     //如果没有缺失数字,那么序号i-nums[i]的和sum为0;如果有缺失数字那么,缺失数字在nums.length位置,
14     //nums.length-x+sum=0;x=nums.length+sum;
15     public int missingNumber2(int[] nums) {
16         int sum = 0;
17         for(int i = 0; i < nums.length; i++)
18             sum = sum - nums[i] + i;
19
20         return sum + nums.length;
21     }

FirstMissingPositive问题描述:给一个没有排序的数组,找到第一个缺失的正数,例如nums={1,2,0}return3,nums={3,4,-1,1}return2

算法分析:既然是找正数,那么肯定是从1开始的,那么我们把1放在nums[0],以此类推,我们把数组中每个元素都放在它应该在的位置。那么找到下标和数字不相符的元素,下标+1即为缺失的正数。

 1 public static int firstMissingPositive(int[] nums) {
 2         int i = 0;
 3         //将nums中每一个元素都放在它所代表的数字的位置上,例如nums[1]=4,那么nums[1]就应该放在第四个位置上,也就是nums[1]=nums[nums[1]-1]
 4         //排除负数
 5         while(i < nums.length)
 6         {
 7             if(nums[i] <= 0 || nums[i] > nums.length || nums[i] == i + 1 || nums[i] == nums[nums[i]-1])
 8             {
 9                 i++;
10             }
11             else
12             {
13                 int temp = nums[i];
14                 nums[i] = nums[temp - 1];
15                 nums[temp - 1] = temp;
16             }
17         }
18         int j = 0;
19         for(j = 0; j < nums.length; j ++)
20         {
21             if(nums[j] != j + 1)
22             {
23                 return j+1;
24             }
25         }
26         return j+1;
27     }
时间: 2024-10-29 19:05:41

MissingNumber缺失的数字,FirstMissingPositive第一个缺失的正数的相关文章

第一个缺失数字

Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 思路: 桶排的思想 从头到尾遍历数组,在位置 i,希望放置的元素是 i+1, 如果不是, 就把 A[ i

LeetCode:Missing Number - 缺失的数字

1.题目名称 Missing Number (缺失的数字) 2.题目地址 https://leetcode.com/problems/missing-number 3.题目内容 英文:Given an array containing n distinct numbers taken from 0, 1, 2, ..., n  find the one that is missing from the array. 中文:给出一个包含了n个不同数字的数组,从0开始一直到n,找出缺失的数字.如果数

[leetcode 双周赛 11] 1228 等差数列中缺失的数字

1228 Missing Number In Arithmetic Progression 等差数列中缺失的数字 问题描述 有一个数组, 其中的值符合等差数列的数值规律, 也就是说: 在?0 <= i < arr.length - 1?的前提下, arr[i+1] - arr[i]?的值都相等. 我们会从该数组中删除一个 既不是第一个 也 不是最后一个的值, 得到一个新的数组??arr. 给你这个缺值的数组?arr, 请你帮忙找出被删除的那个数. 示例 1: 输入: arr = [5,7,11

LeetCode 268. Missing Number (缺失的数字)

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. For example,Given nums = [0, 1, 3] return 2. Note:Your algorithm should run in linear runtime complexity. Could you implement it usi

Leetcode:First Missing Positive 第一个缺失的正数 桶排序

First Missing Positive: Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 题解分析: 如果是T(n)的时间 T(n)的空间,则

[LeetCode] 268. Missing Number 缺失的数字

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. Example 1 Input: [3,0,1] Output: 2 Example 2 Input: [9,6,4,2,3,5,7,0,1] Output: 8 Note:Your algorithm should run in linear runtime c

53 - II. 0~n-1中缺失的数字

面试题53 - II. 0-n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [0,1,3] 输出: 2 示例 2: 输入: [0,1,2,3,4,5,6,7,9] 输出: 8 限制: 1 <= 数组长度 <= 10000 class Solution { public int missingNumber(int[] nums) { if

第一个缺失的整数

求第一个缺失的整数问题: 给定一个数组A[0...N-1],找到从1开始,第一个不在数组中的正整数. 例如:3,5,1,2,-3,7,14,8:返回: 4. 问题分析: 可以将找到的数放在正确的位置上,如果最终发现某个元素一直没有找到,则该元素即为所求. 假设前 i-1 个数已经找到,并已经正确存放在前 i-1 位.则可以分下面几种情况: A[i] = i, i++; 1<A[i]<i, 丢弃: i<A[i]<N, 当A[i] = A[A[i]], 丢弃:当不等于的时候,交换: A

怎样查出连续数字中缺失的数字

今天遇到一个问题,是要从1-100中找到缺失的数字,而且是杂序排列,开始的时候确实有点懵,怎么弄啊,后来看了别人的idea,自己动手做了一下,在这里做个记录,大家有更好的意见,请回复啊 public class PaiXu { /** * @param args */ public static void main(String[] args) { int a[] = {1, 2, 5, 4, 6, 7, 8, 10}; int b[] = null; b = new int[10]; for