Write a SkipList using arbitrary choices for skip levels:
import java.util.Random;
class Skiplist {
Skiplist next1;
Skiplist next2;
Skiplist next3;
Skiplist next4;
int data;
public Skiplist() {
next1 = null;
next2 = null;
next3 = null;
next4 = null;
data = Integer.MIN_VALUE;
}
public Skiplist searchInternal(int target) {
Skiplist skipList = this;
while (skipList != null && skipList.next4 != null && skipList.next4.data < target ) {
skipList = skipList.next4;
}
// if (skipList == null) {skipList = next3;}
while (skipList != null && skipList.next3 != null && skipList.next3.data < target) {
skipList = skipList.next3;
}
// if (skipList == null) {skipList = next2;}
while (skipList != null && skipList.next2 != null && skipList.next2.data < target ) {
skipList = skipList.next2;
}
// if (skipList == null) {skipList = next;}
while (skipList != null && skipList.next1 != null && skipList.next1.data < target) {
skipList = skipList.next1;
}
// if (skipList != null && skipList.data == target) { return this; }
if (skipList != null && skipList.data > target) { return null; }
return skipList;
}
public boolean search(int target) {
Skiplist skipList = searchInternal(target);
if (skipList == null) return false;
if (skipList.data == target) return true;
if ( skipList.next1 != null && skipList.next1.data == target) return true;
return false;
}
public void add(int num) {
Skiplist skipList = searchInternal(num);
Skiplist obj = new Skiplist();
obj.data = num;
if (skipList != null) {
obj.next1 = skipList.next1;
skipList.next1 = obj;
if (skipList.data == Integer.MIN_VALUE) {
skipList.next1 = obj;
skipList.next2 = obj;
skipList.next3 = obj;
skipList.next4 = obj;
return;
}
} else {
obj.next1 = this;
obj.next2 = this;
obj.next3 = this;
obj.next4 = this;
return;
}
Random r = new Random();
r.nextInt(1);
int coinFlip = r.nextInt(1);
if (coinFlip == 0) {return;}
if (skipList.next2 != null) {obj.next2 = skipList.next2;}
coinFlip = r.nextInt(1);
if (coinFlip == 0) {return;}
if (skipList.next3 != null) {obj.next3 = skipList.next3;}
coinFlip = r.nextInt(1);
if (coinFlip == 0) {return;}
if (skipList.next4 != null) {obj.next4 = skipList.next4;}
}
public boolean erase(int num) {
Skiplist skipList = searchInternal(num);
if (skipList == null) {
return false;
}
if (skipList.data == num) {
skipList.data = Integer.MIN_VALUE;
return true;
}
if (skipList.next1 == null && skipList.data != num) {
return false;
}
if (skipList.next1 != null && skipList.next1.data == num) {
skipList.next1 = skipList.next1.next1;
return true;
}
return false;
}
}
Given an integer n, return any array containing n unique integers such that they add up to 0.
class Solution {
public int[] sumZero(int n) {
int[] A = new int[n];
int start = 0-n/2;
for (int i = 0; i < n/2; i++) {
A[i] = start;
start++;
}
int next = n/2;
if (n%2 == 1) {
A[next] = 0;
next++;
}
start = 1;
for (int i = next; i < n; i++) {
A[i] = start;
start++;
}
return A;
}
}
No comments:
Post a Comment