Cheat sao bác, em thử tới thử lui vẫn chưa được
Java:
public void ListNode addFirst(int val) {
ListNode newNode = new ListNode(this.val);
this.val = val;
newNode.next = this.next;
this.next = newNode;
}
Cheat sao bác, em thử tới thử lui vẫn chưa được
public void ListNode addFirst(int val) {
ListNode newNode = new ListNode(this.val);
this.val = val;
newNode.next = this.next;
this.next = newNode;
}
class Solution {
public int firstMissingPositive(int[] nums) {
int len = nums.length;
for(int i=0; i<len; i++){
nums[i] = nums[i] <= 0 ? Integer.MAX_VALUE : nums[i];
}
for(int i=0; i<len; i++){
int idx = Math.abs(nums[i]) - 1;
if(idx < len && nums[idx] > 0)
nums[idx] *= -1;
}
for(int i=0; i<len; i++){
if(nums[i] > 0)
return i + 1;
}
return len + 1;
}
}
n
ngay tại vị trị n-1
, khi đó, thằng đầu tiên không đúng vị trí của nó sẽ là thằng dương nhỏ nhất cần tìm.class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n = len(nums)
for i in range(n):
while 1 <= nums[i] <= n and nums[nums[i] - 1] != nums[i]:
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
for i in range(n):
if nums[i] != i + 1:
return i + 1
return n + 1
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
mp = {}
for num in nums:
if num > 0 :
mp[num] = True
minPos = 1
while mp.get(minPos , False):
minPos += 1
return minPos
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
size = len(nums)
for i in range(size):
while nums[i] != i + 1 and nums[i] > 0 and nums[i] <= size:
temp = nums[nums[i] - 1]
if nums[i] == temp:
break
nums[nums[i] - 1] = nums[i]
nums[i] = temp
for i in range(len(nums)):
if nums[i] != i + 1:
return i + 1
return len(nums) + 1
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n = len(nums)
for i in range(n):
if nums[i] < 0 or nums[i] > n:
nums[i] = n+1
for i in range(n):
while nums[i] <= n and nums[nums[i] - 1] != nums[i]:
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
for i in range(n):
if nums[i] != i+1:
return i + 1
return n+1
giờ đọc lại còn nhớ cách làm không?Hồi trước làm bài này mà chịu chết nên mò đọc solution rồi
vừa vào thấy có cả code, cả comment luôn, submit luôn chứ bài Hát làm làm gìgiờ đọc lại còn nhớ cách làm không?
public class Solution
{
public int FirstMissingPositive(int[] nums)
{
int n = nums.Length;
for (int i = 0; i < n; i++)
{
if (nums[i] <= 0)
{
nums[i] = n + 1;
}
}
for (int i = 0; i < n; i++)
{
int num = Math.Abs(nums[i]);
if (n < num)
{
continue;
}
int index = num - 1;
nums[index] = -Math.Abs(nums[index]);
}
for (int i = 0; i < n; i++)
{
if (0 < nums[i])
{
return i + 1;
}
}
return n + 1;
}
}
Mấy lần làm bài này, lần nào cũng đọc giải hoặc đíu làm nữa lolHồi trước làm bài này mà chịu chết nên mò đọc solution rồi
Nếu nó là tag medium thì cân nhắc làm tiếp. Chứ bài Hard thì cuối tuần còn suy nghĩ, chứ đi làm thì daily giải trí thôi, nghĩ tốn thời gian mà chưa chắc nghĩ ra kkMấy lần làm bài này, lần nào cũng đọc giải hoặc đíu làm nữa lol
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
for i in range(len(nums)):
current = nums[i]
while current - 1 < len(nums) and current - 1 >= 0:
next = nums[current - 1]
nums[current - 1] = float('-inf')
current = next
for i in range(len(nums)):
if nums[i] != float('-inf'):
return i + 1
return len(nums) + 1
public class Solution {
public int FirstMissingPositive(int[] nums) {
int[] ints = new int[nums.Length+1];
int result = 1;
for(int i =0; i < nums.Length;i++)
{
if (nums[i] > nums.Length || nums[i] < 1)
continue;
else
ints[nums[i]] = 1;
}
for(int i =1;i < ints.Length;i++)
{
if (ints[i] ==0)
{
result = i;
break;
}
else
result++;
}
return result;
}
}
var firstMissingPositive = function(nums) {
for (let i = 0; i < nums.length; i++) {
nums[i]--;
}
for (let i = 0; i < nums.length;) {
const k = nums[i];
if (k === i) {
i++;
continue;
}
if (k < i) {
nums[i] = nums[nums.length - 1];
nums.pop();
continue;
}
if (k > i) {
if (k >= nums.length || k === nums[k]) {
nums[i] = nums[nums.length - 1];
nums.pop();
} else {
[nums[i], nums[k]] = [nums[k], nums[i]];
}
}
}
return nums.length + 1;
};
int firstMissingPositive(vector<int>& nums) {
bool arr[100002] = {false};
for(int i = 0; i != nums.size(); i++ ) {
arr[min(max(nums[i], 0), 100001)] = true;
}
for(int i = 1; i < 100001; i++ ) {
if(arr[i] == false) return i;
}
return 100001;
}
function firstMissingPositive(nums: number[]): number {
nums.sort((a, b) => a - b);
let minPositive = 1;
for (let num of nums) {
if (num < 1 || num === minPositive - 1) continue;
if (num > minPositive) return minPositive
else minPositive++
}
return minPositive
};
function firstMissingPositive(nums: number[]): number {
const length = nums.length;
// Handle negative
for (let i = 0; i < length; i++) {
if (nums[i] < 1) {
nums[i] = length + 1;
}
}
// Set valid position into negative
for (let i = 0; i < length; i++) {
const num = Math.abs(nums[i])
if (num < length) {
nums[num - 1] = Math.abs(nums[num - 1]) * -1
}
}
for (let i = 0; i < length; i++) {
if (nums[i] > 0) return i + 1;
}
return length + 1
};
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int arr[100002] = {0};
for(int num:nums){
if(num<100002 && num > 0){
arr[num] = 1;
}
}
for(int i=1;i<100002;++i){
if(arr[i] == 0)return i;
}
return 0;
}
};
public class Solution {
public int FirstMissingPositive(int[] nums) {
var len = nums.Length;
int temp;
for(var i = 0; i < len; i++){
if(nums[i] <= 0 || nums[i] >= len + 1) nums[i] = 0;
else if(nums[i] != i + 1){
if(nums[nums[i] - 1] == nums[i])
nums[i] = 0;
else {
temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
i--;
}
}
}
for(var i = 0; i < len; i++){
if(nums[i] != i+ 1) return i+1;
}
return len + 1;
}
}
Mỗi ngày nó random 1 bài trong đống bài bên dưới, có bài nào mới đâu mà khó dễLâu rồi vào lại, cảm giác Difficulty của Leetcode hiện tại dễ hơn trước đây phải k các bác