1. 程式人生 > >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.

基本思路:

剛開始看到這個題時,我想到了用“異或運算”,即,先找到陣列中有多少個正整數(n),然後確定一個整數target=n+1,

再遍歷陣列,讓陣列中的正整數分別與1...target的數異或運算可得出最後結果,例如:陣列為[3,4,-1,1]那麼target=3+1=4;然後計算 (3^

1^4^2^1^3^4)紅色字型標記的是從1到target的整數,黑色字型為陣列中的數,最後結果為2.但是,當在測試的時候發現如果陣列中有重複的正整數就不行了,例如陣列[1,1]。做到這裡我有思考過將陣列的重複元素去掉,但題目有規定,要求空間複雜度固定。目前我暫時沒有想到一種去掉陣列中重複元素的空間複雜度為常數的方法。

於是重新思考,當想到是否可以把陣列中的元素放入“合適”的位置時,豁然開朗,例如將1放在0位置上,2放在1位置上。。。,最後變數陣列,如果某個位置上的數不合適,則返回該位置上“合適”的數,也就是First Missing Positive。

	public int firstMissingPositive(int[] A)
	{
		if(A.length==0||A==null)
			return 1;
		//把元素放入正確的位置,例如1放在A[0],2放在A[1]...
		for(int i = 0;i<A.length;i++)
		{
			while(A[i]!=i+1)
			{
				if(A[i]>=A.length||A[i]<=0||A[i]==A[A[i]-1])
					break;
				int temp = A[i];
				A[i] = A[temp-1];
				A[temp-1] = temp;
			}
		}
		
		for(int i = 0;i<A.length;i++)
		{
			if(A[i]!=i+1)
				return i+1;
		}
		return A.length+1;
	}



相關推薦

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] re

LeetCode41. First Missing Positive 陣列技巧

Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2,0] Output: 3 Example 2: Input: [3,4,-

LeetCode | 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 

387. First Unique Character in a String字串第一唯一字元-- c語言

387. First Unique Character in a String(字串中的第一個唯一字元)-- c語言Given a string, find the first non-repeating character in it and return it's ind

Leetcode 041 First Missing Positive桶排序

解題思路:桶排序的變種,每次把碰到把nums[i] 和 nums[nums[i]] 互換,保證 nums[i] = nums[nums[i]]。當然nums[i]小於零,或者是大於陣列的可以忽略。最後遍歷一遍陣列,第一個不匹配的位置即為答案。class Solution {

每日一題--LeetCode 387 字串第一唯一字元java

題目描述: 程式碼如下: class Solution { public int firstUniqChar(String s) { String tmp=s; char []data=tmp.toCharArray(); if(

劍指offer題解陣列出現次數超過一半的數字

題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。   解題思路   先找到出現次數最多

陣列和為sum 且 不重複

  class Solution { public: vector<vector<int> > combinationSum2(vector<int> &num, int target) { vector<int

資料結構——演算法之032求兩第一最長子串

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 題目: 求兩個串中的第一個最長子串(神州數碼以前試題).如"abractyeyt","dgdsaeactyey"的最大子串為"actyey".題目

LeetCode刷題記錄——第387題字串第一唯一字元

題目描述 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = “leetcode” 返回 0. s = “loveleetcode”, 返回 2. 思路分析 關鍵問題在於,如何找到第一個不重複字元

SSM框架的搭建Spring+SpringMVC+Mybatis第一專案的搭建

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchem

bootstrap select 多選的用法,取值和賦值取消預設選擇第一的對勾

h5自帶的select標籤可以實現按住ctrl鍵多選的功能,但是樣式及其難看。 bootstrap select是很好用的前端外掛 首先引入bootstrap和bootstrap-select的css和js <link rel="stylesheet" h

陣列缺失的最小整數

華電北風吹 日期:2016/2/24 題目描述: 對一個未排序的陣列,找出缺失的最小正整數。 例如,對於陣列[1,2,0]返回3;對於陣列[3,4,-1,1]返回2。 演算法時間複雜度應

如何優化Java程式:十進位制轉十六進位制2的31次方以內的整數

程式碼如下: package com.java; import java.util.Scanner; public class TestTransform {  public static void main(String[] args) {     Scanner

LeetCode 41. 缺失的第一正數First Missing Positive

style 第一個 交換 ret etc 沒有 解題思路 ssi != 題目描述 給定一個未排序的整數數組,找出其中沒有出現的最小的正整數。 示例 1: 輸入: [1,2,0] 輸出: 3 示例 2: 輸入: [3,4,-1,1] 輸出: 2 示例 3: 輸入: [

3.2.1 LeetCode陣列類題目選做1—— First Missing Positive & Majority Element & Product of Array Except Self

陣列題目概述 陣列的題目很多很重要,一般和其他知識點綜合應用。包括Two pointer,Binary Search,Dynamic Programming,Greedy,Backtracking 等,各類演算法都將分別選做一些題目學習交流總結。 這一系列選擇出一些非應用

尋找不在陣列最小的整數 First Missing Positive

問題:給出一個無序的陣列,其中包含有任意的整數。現在要求返回不包含在陣列中的最小的正整數。 要求:時間複雜度O(n),空間複雜度O(1)。 思路:如果不要求空間複雜度,可以用hash、map進行統計。但是現在,不允許藉助臨時空間。但是對於無序陣列,不借助空間怎麼可能統計的出

Find First and Last Position of Element in Sorted Array數組第一元素和最後一個元素

run nbsp arc example col ascend == sea 如果 Given an array of integers nums sorted in ascending order, find the starting and ending positio

javaleetcode852 山脈陣列的封頂索引二分查詢法陣列最大值的下標Peak Index in a Mountain Array

題目描述: 我們把符合下列屬性的陣列 A 稱作山脈: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A

[Swift]LeetCode41. 缺失的第一正數 | First Missing Positive

Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2,0] Output: 3 Example 2: Input: [3,4,-1,1]