/* delete val from the node */ int delValFromNode(int val, struct btreeNode *myNode) { int pos, flag = 0; if (myNode) { if (val < myNode->val[1]) { pos = 0; flag = 0; } else { for (pos = myNode->count; (val < myNode->val[pos] && pos > 1); pos--); if (val == myNode->val[pos]) { flag = 1; } else { flag = 0; } } if (flag) { if (myNode->link[pos - 1]) { copySuccessor(myNode, pos); flag = delValFromNode(myNode->val[pos], myNode->link[pos]); if (flag == 0) { printf("Given data is not present in B-Tree\n"); } } else { removeVal(myNode, pos); } } else { flag = delValFromNode(val, myNode->link[pos]); } if (myNode->link[pos]) { if (myNode->link[pos]->count < MIN) adjustNode(myNode, pos); } } return flag; }
int delValFromNode(long long int val, struct btreeNode *myNode) { int pos, flag = 0; if (myNode) { if (val < myNode->val[1]) { pos = 0; flag = 0; } else { for (pos = myNode->count; (val < myNode->val[pos] && pos > 1); pos--); if (val == myNode->val[pos]) { flag = 1; } else { flag = 0; } } if (flag) { if (myNode->link[pos - 1]) { copySuccessor(myNode, pos); flag = delValFromNode(myNode->val[pos], myNode->link[pos]); if (flag == 0) { printf("Dado não encontrado na árvore\n"); } } else { removeVal(myNode, pos); } } else { flag = delValFromNode(val, myNode->link[pos]); } if (myNode->link[pos]) { if (myNode->link[pos]->count < MIN) adjustNode(myNode, pos); } } return flag; }
bool containsNearbyDuplicate(int* nums, int numsSize, int k) { if(numsSize < 2) { return false; } struct Set set; initSet(&set, numsSize); for(int i = 0; i < numsSize; ++i) { if(i>k) { removeVal(&set,nums[i-k-1]); } if(!addValue(&set, nums[i])) { releaseSet(&set); return true; } } releaseSet(&set); return false; }