Leecode: First Missing Positive (JS解答)
解题思路:一种是互换方法,把数放到它对应的位置上去,比如把2放在nums[1]即数组第2个,但是leecode提交时会显示超时
第二种方法思路用图来表示:
方法一代码:
function firstMissingPositive(nums: number[]): number {
var n:number = nums.length;
for(var i = 0; i < n; i++){
while(nums[i] > 0 && nums[i] <= n && nums[i] !== nums[nums[i]-1]){
var temp:number = nums[i];
nums[i] = nums[nums[i]-1];
nums[nums[i]-1] = temp;
}
}
for(var i = 0; i < n; i++){
if(nums[i] !== i+1){
return i+1;
}
}
return n + 1;
};
方法二代码:
function firstMissingPositive2(nums: number[]): number {
if(nums === null || nums.length === 0) return 0;
var n:number = nums.length;
for(var i = 0; i < n; i++){
if(nums[i] <= 0){
nums[i] = n + 1;
}
}
for(var i = 0; i < n; i++){
var temp:number = Math.abs(nums[i]);
if(temp <= n){
nums[temp-1] = -Math.abs(nums[temp-1])
}
}
for(var i = 0; i < n; i++){
if(nums[i] > 0){
return i+1;
}
}
return n + 1;
};