1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| object FirstMissingPositive {
def main(args: Array[String]): Unit = { println(firstMissingPositive(Array(1, 2, 0))) println(firstMissingPositive(Array(3, 4, -1, 1))) println(firstMissingPositive(Array(7, 8, 9, 11, 12)))
println(firstMissingPositive2(Array(1))) println(firstMissingPositive2(Array(-1, -2))) println(firstMissingPositive2(Array(2, 1))) println(firstMissingPositive2(Array(1, 2, 0))) println(firstMissingPositive2(Array(3, 4, -1, 1))) println(firstMissingPositive2(Array(7, 8, 9, 11, 12)))
println(firstMissingPositive3(Array(2, 1))) println(firstMissingPositive3(Array(1, 2, 0))) println(firstMissingPositive3(Array(3, 4, -1, 1))) println(firstMissingPositive3(Array(7, 8, 9, 11, 12))) }
def firstMissingPositive(nums: Array[Int]): Int = { if (nums.isEmpty) return 1 val dp = new Array[Int](nums.size + 1)
for (i <- nums) { if (i >= 1 && i <= nums.size) dp(i) = 1 }
for (i <- 1 until nums.size + 1) { if (dp(i) == 0) { return i } }
nums.size + 1 }
def firstMissingPositive2(nums: Array[Int]): Int = { if (nums.isEmpty) return 1 if (nums.length == 1) { if (nums(0) == 1) return 2 else return 1 }
for (i <- 0 until nums.size) { if (nums(i) <= 0) { nums(i) = nums.size + 1 } }
for (i <- 0 until nums.size) { val j = Math.abs(nums(i)) if (j > 0 && j <= nums.size) { nums(j - 1) = -Math.abs(nums(j - 1)) } }
for (i <- 0 until nums.size) { if (nums(i) > 0) { return i + 1 } }
nums.size + 1 }
def firstMissingPositive3(nums: Array[Int]): Int = { if (nums.isEmpty) return 1 if (nums.length == 1) { if (nums(0) == 1) return 2 else return 1 }
for(i <- 0 until nums.length){ while(nums(i) > 0 && nums(i) <= nums.length && nums(nums(i) - 1) != nums(i)){ val tmp = nums(nums(i) - 1) nums(nums(i) - 1) = nums(i) nums(i)= tmp } }
for(i <- 0 until nums.length){ if(nums(i) != i+1){ return i + 1 } }
nums.length + 1 } }
|