国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

leecode 解題總結(jié):41. First Missing Positive

2019-11-09 20:19:59
字體:
供稿:網(wǎng)友
#include <iostream>#include <stdio.h>#include <vector>#include <set>using namespace std;/*問題: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.分析:尋找首次丟失的整數(shù),但是給定的數(shù)組可能含有0和負(fù)數(shù)。題目只能用O(n)時間,不能排序。應(yīng)該是掃描一遍數(shù)組就算出答案。可以將不斷掃描的數(shù)進(jìn)行異或處理:比如: 1^2=3      1^3^4=0001 ^ 0011 ^ 0100 = 0010^0100=0110=6	  和1^2^3^4=0110^0010=0100=4也就是說可以將數(shù)組中整數(shù)進(jìn)行異或處理得到sum1,獲取數(shù)組中最大整數(shù)n,對1到n也異或處理得到sum2,將sum1與sum2進(jìn)行異或處理,得到的結(jié)果如果為0,那么丟失的數(shù)為n+1;否則,丟失的整數(shù)為sum1^sum2未能求解出輸入:3(數(shù)組元素個數(shù))1 2 0(數(shù)組所有元素)43 4 -1 121 121000 -121 2輸出32213關(guān)鍵:1 解法:設(shè)定一種映射A[i] = i + 1,比如1對應(yīng)A[0]。如果找到某個元素A[i],就將它和A[ A[i] -1 ]交換。        找到i從0開始找到第一個A[i] != i + 1的元素即可	//交換,在數(shù)組長度允許的條件下,將位置不符合的元素進(jìn)行交換	if(1 <= value && value <= size && value != nums.at(value - 1))	{		swap(nums.at(i) ,nums.at(value - 1) );		//每次交換后,當(dāng)前位置不一定符合,所以i--,再重新計算一次		i--;	}2 		//如果是空數(shù)組,返回1,等于丟失第一個整數(shù)		if(nums.empty())		{			return 1;		}3 如果數(shù)組中出現(xiàn)重復(fù)元素需要規(guī)避4 并不一定是最大數(shù)之前的元素都會出現(xiàn)*/class Solution {public:    int firstMissingPositive(vector<int>& nums) {		//如果是空數(shù)組,返回1,等于丟失第一個整數(shù)		if(nums.empty())		{			return 1;		}		int size = nums.size();		//防止出現(xiàn)重復(fù)元素		int value;		for(int i = 0 ; i < size ; i++)		{			//元素i+1在下標(biāo)為i的位置上,則跳過			if(nums.at(i) == i + 1)			{				continue;			}			value = nums.at(i);			//交換,在數(shù)組長度允許的條件下,將位置不符合的元素進(jìn)行交換			if(1 <= value && value <= size && value != nums.at(value - 1))			{				swap(nums.at(i) ,nums.at(value - 1) );				//每次交換后,當(dāng)前位置不一定符合,所以i--,再重新計算一次				i--;			}		}		//從頭開始遍歷		for(int i = 0 ; i < size ; i++)		{			if(nums.at(i) != (i + 1) )			{				return (i+1);			}		}		//如果數(shù)組中元素都符合擺放,則說明是最后一個元素,數(shù)組長度+1		return (size + 1);    }};void PRocess(){	Solution solution;	int num;	vector<int> nums;	int value;	while(cin >> num)	{		nums.clear();		for(int i = 0 ; i < num ; i++)		{			cin >> value;			nums.push_back(value);		}		int result = solution.firstMissingPositive(nums);		cout << result << endl;	}}int main(int argc , char* argv[]){	process();	getchar();	return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 遂平县| 浦北县| 吉林省| 衡东县| 龙江县| 色达县| 綦江县| 新津县| 韶关市| 成都市| 辽阳市| 金川县| 赤水市| 浮梁县| 库车县| 揭阳市| 博爱县| 珲春市| 兰坪| 稻城县| 赞皇县| 商丘市| 象山县| 靖远县| 普兰店市| 偃师市| 三穗县| 蒲江县| 岑溪市| 遵化市| 房产| 成安县| 道真| 清水县| 新津县| 阜城县| 济源市| 丘北县| 广河县| 宝山区| 玉树县|