Procházet zdrojové kódy

New problems done, including april day 10 challenge

master
Lachlan Jacob před 5 roky
rodič
revize
4eea15918f

+ 58
- 0
problems/155/main.py Zobrazit soubor

@@ -0,0 +1,58 @@
class MinStack:

def __init__(self):
self.stack = []
self.minEl = None

def push(self, x: int) -> None:
node = Node(x)
if self.minEl is None or node.value <= self.minEl.value:
node.lastMin = self.minEl
self.minEl = node
self.stack.append(node)

def pop(self) -> None:
if len(self.stack) > 0:
ret = self.stack[len(self.stack) - 1]
if ret.value == self.minEl.value:
self.minEl = self.minEl.lastMin
self.stack = self.stack[0:len(self.stack) - 1]
return ret.value
return None

def top(self) -> int:
if len(self.stack) > 0:
return self.stack[len(self.stack) - 1].value
return None

def getMin(self) -> int:
return self.minEl.value

def __str__(self):
str_result = ""
for x in self.stack:
str_result += "\n"
str_result += str(x)
return str_result
class Node:
def __init__(self, x, lastMin = None):
self.value = x
self.lastMin = lastMin
def __str__(self):
return f"Value: {str(self.value)} Last Min: {str(self.lastMin)}"

# Your MinStack object will be instantiated and called as such:
values = []
obj = MinStack()
obj.push(-2)
obj.push(0)
obj.push(-3)
values.append(obj.getMin())
values.append(obj.pop())
values.append(obj.top())
values.append(obj.getMin())

print("Expected: [-3, -3, 0, -2]")
print("Got:", values)

+ 20
- 0
problems/155/problem.txt Zobrazit soubor

@@ -0,0 +1,20 @@
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
getMin() -- Retrieve the minimum element in the stack.


Example:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> Returns -3.
minStack.pop();
minStack.top(); --> Returns 0.
minStack.getMin(); --> Returns -2.


+ 3
- 0
problems/155/run.sh Zobrazit soubor

@@ -0,0 +1,3 @@
#!/bin/bash

python3 main.py

+ 31
- 0
problems/26/main.c Zobrazit soubor

@@ -0,0 +1,31 @@
#include <stdio.h>

int removeDuplicates(int*, int);
int removeDuplicates(int* nums, int numsSize) {
if (numsSize == 0) {
return 0;
}
int shift = 0;
int last = nums[0] + 1; // This way the first item will never be a duplicate
for (int i = 0; i < numsSize; i++) {
int value = nums[i];
nums[i - shift] = value;
if (value == last) {
shift++;
}
last = value;
}
return numsSize - shift;
}

int main() {
printf("Expetected: Length 5, [0, 1, 2, 3, 4]\n");
int arr[10] = {0,0,1,1,1,2,2,3,3,4};
int newLength = removeDuplicates(&arr[0], 10); // &arr[0] is a hack to stop warning about static sized pointer being passed
printf("Got: Length: %d,", newLength);
for (int i = 0; i < newLength; i++) {
printf(" %d ", arr[i]);
}
printf("\n");
return 0;
}

+ 36
- 0
problems/26/problem.txt Zobrazit soubor

@@ -0,0 +1,36 @@
Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],

Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.

It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);

// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
print(nums[i]);
}

+ 5
- 0
problems/26/run.sh Zobrazit soubor

@@ -0,0 +1,5 @@
#!/bin/bash

gcc -o main main.c
./main
rm main

Načítá se…
Zrušit
Uložit