Add solution for LL reverse
This commit is contained in:
parent
012f7b9e44
commit
8bf8740e48
5 changed files with 203 additions and 0 deletions
|
@ -0,0 +1 @@
|
|||
|
55
neetcode/arrays/longest_consecutive_sequence/README.md
Normal file
55
neetcode/arrays/longest_consecutive_sequence/README.md
Normal file
|
@ -0,0 +1,55 @@
|
|||
Longest Consecutive Sequence
|
||||
Given an array of integers nums, return the length of the longest consecutive sequence of elements that can be formed.
|
||||
|
||||
A consecutive sequence is a sequence of elements in which each element is exactly 1 greater than the previous element. The elements do not have to be consecutive in the original array.
|
||||
|
||||
You must write an algorithm that runs in O(n) time.
|
||||
|
||||
Example 1:
|
||||
|
||||
Input: nums = [2,20,4,10,3,4,5]
|
||||
|
||||
Output: 4
|
||||
Explanation: The longest consecutive sequence is [2, 3, 4, 5].
|
||||
|
||||
Example 2:
|
||||
|
||||
Input: nums = [0,3,2,5,4,6,1,1]
|
||||
|
||||
Output: 7
|
||||
Constraints:
|
||||
|
||||
0 <= nums.length <= 1000
|
||||
-10^9 <= nums[i] <= 10^9
|
||||
|
||||
# Solution
|
||||
|
||||
[2,20,4,10,3,4,5]
|
||||
|
||||
# 1
|
||||
e = 2
|
||||
[[2]]
|
||||
|
||||
# 2
|
||||
e = 20
|
||||
[[2], [20]]
|
||||
|
||||
# 3
|
||||
e = 4
|
||||
[[2], [20], [4]]
|
||||
|
||||
# 4
|
||||
e = 10
|
||||
[[2], [20], [4], [10]]
|
||||
|
||||
# 5
|
||||
e = 3
|
||||
[[2,3], [20], [4], [10]]
|
||||
|
||||
# 6
|
||||
e = 4
|
||||
[[2,3,4], [20], [4], [10]]
|
||||
|
||||
# 7
|
||||
e = 5
|
||||
[[2,3,4,5], [20], [4], [10]]
|
33
neetcode/arrays/longest_consecutive_sequence/solution.py
Normal file
33
neetcode/arrays/longest_consecutive_sequence/solution.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
from typing import List
|
||||
import pytest
|
||||
|
||||
|
||||
class Solution:
|
||||
def longestConsecutive(self, nums: List[int]) -> int:
|
||||
if len(nums) == 0:
|
||||
return 0
|
||||
res: List[List[int]] = []
|
||||
for i in range(0, len(nums)):
|
||||
if i == 0:
|
||||
res.append([nums[i]])
|
||||
continue
|
||||
e = nums[i]
|
||||
for ri in range(0, len(res)):
|
||||
if res[ri][-1] + 1 == e:
|
||||
res[ri].append(e)
|
||||
break
|
||||
res.append([e])
|
||||
return res
|
||||
return max([len(r) for r in res])
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"input_value, expected_value",
|
||||
[
|
||||
([2, 20, 4, 10, 3, 4, 5], 4),
|
||||
([0, 3, 2, 5, 4, 6, 1, 1], 7),
|
||||
],
|
||||
)
|
||||
def test_solution(input_value, expected_value):
|
||||
s = Solution()
|
||||
assert s.longestConsecutive(nums=input_value) == expected_value
|
68
neetcode/linked_list/reverse_linked_list/README.md
Normal file
68
neetcode/linked_list/reverse_linked_list/README.md
Normal file
|
@ -0,0 +1,68 @@
|
|||
# Task
|
||||
Reverse Linked List
|
||||
Given the beginning of a singly linked list head, reverse the list, and return the new beginning of the list.
|
||||
|
||||
Example 1:
|
||||
|
||||
Input: head = [0,1,2,3]
|
||||
|
||||
Output: [3,2,1,0]
|
||||
Example 2:
|
||||
|
||||
Input: head = []
|
||||
|
||||
Output: []
|
||||
Constraints:
|
||||
|
||||
0 <= The length of the list <= 1000.
|
||||
-1000 <= Node.val <= 1000
|
||||
|
||||
# Solution
|
||||
## 0
|
||||
ll = [0, 1, 2, 3]
|
||||
p = None
|
||||
c = 0
|
||||
n = 1
|
||||
|
||||
## 1
|
||||
p
|
||||
c
|
||||
n
|
||||
[0, 1, 2, 3]
|
||||
|
||||
```
|
||||
if p == c
|
||||
p.next = None
|
||||
c = n
|
||||
n = c.next
|
||||
```
|
||||
|
||||
## 2
|
||||
p
|
||||
c
|
||||
n
|
||||
[0, 1, 2, 3]
|
||||
```
|
||||
c.next = p
|
||||
p = c
|
||||
c = n
|
||||
n = c.next
|
||||
```
|
||||
|
||||
## 3
|
||||
p
|
||||
c
|
||||
n
|
||||
[0, 1, 2, 3]
|
||||
```
|
||||
c.next = p
|
||||
p = c
|
||||
c = n
|
||||
n = c.next
|
||||
```
|
||||
## 4
|
||||
p
|
||||
c
|
||||
n = None
|
||||
[0, 1, 2, 3]
|
||||
|
46
neetcode/linked_list/reverse_linked_list/main.py
Normal file
46
neetcode/linked_list/reverse_linked_list/main.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
from typing import Optional
|
||||
|
||||
|
||||
# Definition for singly-linked list.
|
||||
class ListNode:
|
||||
def __init__(self, val=0, next=None):
|
||||
self.val = val
|
||||
self.next = next
|
||||
|
||||
|
||||
class Solution:
|
||||
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
|
||||
if not head:
|
||||
return None
|
||||
if head.next is None:
|
||||
return head
|
||||
p = head
|
||||
c = head
|
||||
n = head.next
|
||||
while True:
|
||||
if p == c:
|
||||
p.next = None
|
||||
c = n
|
||||
n = c.next
|
||||
if c.next is None:
|
||||
c.next = p
|
||||
break
|
||||
else:
|
||||
c.next = p
|
||||
p = c
|
||||
c = n
|
||||
n = c.next
|
||||
return c
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
s = Solution()
|
||||
e3 = ListNode(3, None)
|
||||
e2 = ListNode(2, e3)
|
||||
e1 = ListNode(1, e2)
|
||||
e0 = ListNode(0, e1)
|
||||
k = [e0, e1, e2, e3]
|
||||
nb = s.reverseList(e0)
|
||||
for index, elem in enumerate(k):
|
||||
next_val = elem.next.val if elem.next else "No value"
|
||||
print(f"{index} - v: {elem.val} - vn: {next_val}")
|
Loading…
Reference in a new issue