From f5d7119ebfee60e11f5bfa74ccae33d0cb85c179 Mon Sep 17 00:00:00 2001 From: tyleroar Date: Mon, 16 Jan 2017 17:53:51 -0500 Subject: [PATCH 1/2] C Challenge 3 (Unverified) --- challenge_3/c/tyleroar/README.md | 19 ++++ challenge_3/c/tyleroar/src/challenge3.c | 96 ++++++++++++++++++++ challenge_3/c/tyleroar/src/challenge3.c.orig | 96 ++++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 challenge_3/c/tyleroar/README.md create mode 100644 challenge_3/c/tyleroar/src/challenge3.c create mode 100644 challenge_3/c/tyleroar/src/challenge3.c.orig diff --git a/challenge_3/c/tyleroar/README.md b/challenge_3/c/tyleroar/README.md new file mode 100644 index 000000000..8e7959713 --- /dev/null +++ b/challenge_3/c/tyleroar/README.md @@ -0,0 +1,19 @@ +#Majority Element + +##Premise + +- Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times. + +- You may assume that the array is non-empty and the majority element always exist in the array. + +for example, given array = [2,2,3,7,5,7,7,7,4,7,2,7,4,5,6,7,7,8,6,7,7,8,10,12,29,30,19,10,7,7,7,7,7,7,7,7,7] your program should return 7 + +[Testing](https://github.com/YearOfProgramming/2017Challenges/tree/testing#testing) + +Expected input: + + 2,2,3,7,5,7,7,7,4,7,2,7,4,5,6,7,7,8,6,7,7,8,10,12,29,30,19,10,7,7,7,7,7,7,7,7,7 + +Expected output: + + 7 diff --git a/challenge_3/c/tyleroar/src/challenge3.c b/challenge_3/c/tyleroar/src/challenge3.c new file mode 100644 index 000000000..464bdb5a6 --- /dev/null +++ b/challenge_3/c/tyleroar/src/challenge3.c @@ -0,0 +1,96 @@ +#include +#include +#include +struct bst { + int x; + int occ; + struct bst *left; + struct bst *right; +}; +void freeBST(struct bst *head) { + if (head==NULL) return; + if (head->left!=NULL) freeBST(head->left); + if (head->right!=NULL) freeBST(head->right); + free(head); +} +int addNum(int num, struct bst *head) { + struct bst *cur = head; + while (1) { + if (num==cur->x) { + cur->occ++; //if the number is already in the tree increase it's occurence + return cur->occ; + } + if (numx) { + if (cur->left==NULL) { + struct bst *new = malloc(sizeof(struct bst)); + new->x = num; + new->occ = 1; + new->left = NULL; + new->right = NULL; + cur->left = new; + return new->occ; + } else cur = cur->left; + } else if (num>cur->x) { + if (cur->right ==NULL) { + struct bst *new = malloc(sizeof(struct bst)); + new->x = num; + new->left = NULL; + new->right = NULL; + new->occ=1; + cur->right = new; + return new->occ; + } else cur=cur->right; + } + } +} +char *readLine() { + int length = 1; + char *string = NULL; + char c; + while (EOF!=(c=getchar()) && '\r'!=c && '\n' != c) { + string=realloc(string,length); + string[length-1]=c; + length++; + } + string[length-1]='\0'; + return string; +} +int majorityElement(int *nums, int length) { + if (!nums) return -1; + int element = nums[0]; + struct bst *head = malloc(sizeof(struct bst)); + head->x=nums[0]; + head->occ =1; + head->left = NULL; + head->right = NULL; + for (int i=1; i(length/2)) element=nums[i]; + } + if (head) freeBST(head); + return element; +} +int main() { + int *nums = malloc(sizeof(int)); + int length=0; + char *input = readLine(); + if (input==NULL) { + printf("unable to read input!\n"); + return -1; + } + char *ptr=NULL; + ptr = strtok(input,","); + while (ptr!=NULL) { + int a = atoi(ptr); + length++; + if (length>1) nums=realloc(nums,(length+1)*sizeof(int)); + nums[length-1]=a; + ptr=strtok(NULL, ","); + } + + printf("%d\n", majorityElement(nums, length)); + + if (input) free(input); + if (nums) free(nums); + return 0; +} diff --git a/challenge_3/c/tyleroar/src/challenge3.c.orig b/challenge_3/c/tyleroar/src/challenge3.c.orig new file mode 100644 index 000000000..2f565e8ea --- /dev/null +++ b/challenge_3/c/tyleroar/src/challenge3.c.orig @@ -0,0 +1,96 @@ +#include +#include +#include +struct bst { + int x; + int occ; + struct bst *left; + struct bst *right; +}; +void freeBST(struct bst *head) { + if (head==NULL) return; + if (head->left!=NULL) freeBST(head->left); + if (head->right!=NULL) freeBST(head->right); + free(head); +} +int addNum(int num, struct bst *head) { + struct bst *cur = head; + while (1) { + if (num==cur->x) { + cur->occ++; //if the number is already in the tree increase it's occurence + return cur->occ; + } + if (numx) { + if (cur->left==NULL) { + struct bst *new = malloc(sizeof(struct bst)); + new->x = num; + new->occ = 1; + new->left = NULL; + new->right = NULL; + cur->left = new; + return new->occ; + } else cur = cur->left; + } else if (num>cur->x) { + if (cur->right ==NULL) { + struct bst *new = malloc(sizeof(struct bst)); + new->x = num; + new->left = NULL; + new->right = NULL; + new->occ=1; + cur->right = new; + return new->occ; + } else cur=cur->right; + } + } +} +char *readLine() { + int length = 1; + char *string = NULL; + char c; + while (EOF!=(c=getchar()) && '\r'!=c && '\n' != c) { + string=realloc(string,length); + string[length-1]=c; + length++; + } + string[length-1]='\0'; + return string; +} +int majorityElement(int *nums, int length) { +if (!nums) return -1; +int element = nums[0]; +struct bst *head = malloc(sizeof(struct bst)); +head->x=nums[0]; +head->occ =1; +head->left = NULL; +head->right = NULL; +for (int i=1; i(length/2)) element=nums[i]; +} +if (head) freeBST(head); +return element; +} +int main() { + int *nums = malloc(sizeof(int)); + int length=0; + char *input = readLine(); + if (input==NULL) { + printf("unable to read input!\n"); + return -1; + } + char *ptr=NULL; + ptr = strtok(input,","); + while (ptr!=NULL) { + int a = atoi(ptr); + length++; + if (length>1) nums=realloc(nums,(length+1)*sizeof(int)); + nums[length-1]=a; + ptr=strtok(NULL, ","); + } + + printf("%d\n", majorityElement(nums, length)); + +if (input) free(input); +if (nums) free(nums); +return 0; +} From 1adfc911b3c1273b2fc41f65ca9c68f5f2905e2c Mon Sep 17 00:00:00 2001 From: tyleroar Date: Mon, 16 Jan 2017 17:55:20 -0500 Subject: [PATCH 2/2] C Challenge 3 (Unverified) --- challenge_3/c/tyleroar/src/challenge3.c.orig | 96 -------------------- 1 file changed, 96 deletions(-) delete mode 100644 challenge_3/c/tyleroar/src/challenge3.c.orig diff --git a/challenge_3/c/tyleroar/src/challenge3.c.orig b/challenge_3/c/tyleroar/src/challenge3.c.orig deleted file mode 100644 index 2f565e8ea..000000000 --- a/challenge_3/c/tyleroar/src/challenge3.c.orig +++ /dev/null @@ -1,96 +0,0 @@ -#include -#include -#include -struct bst { - int x; - int occ; - struct bst *left; - struct bst *right; -}; -void freeBST(struct bst *head) { - if (head==NULL) return; - if (head->left!=NULL) freeBST(head->left); - if (head->right!=NULL) freeBST(head->right); - free(head); -} -int addNum(int num, struct bst *head) { - struct bst *cur = head; - while (1) { - if (num==cur->x) { - cur->occ++; //if the number is already in the tree increase it's occurence - return cur->occ; - } - if (numx) { - if (cur->left==NULL) { - struct bst *new = malloc(sizeof(struct bst)); - new->x = num; - new->occ = 1; - new->left = NULL; - new->right = NULL; - cur->left = new; - return new->occ; - } else cur = cur->left; - } else if (num>cur->x) { - if (cur->right ==NULL) { - struct bst *new = malloc(sizeof(struct bst)); - new->x = num; - new->left = NULL; - new->right = NULL; - new->occ=1; - cur->right = new; - return new->occ; - } else cur=cur->right; - } - } -} -char *readLine() { - int length = 1; - char *string = NULL; - char c; - while (EOF!=(c=getchar()) && '\r'!=c && '\n' != c) { - string=realloc(string,length); - string[length-1]=c; - length++; - } - string[length-1]='\0'; - return string; -} -int majorityElement(int *nums, int length) { -if (!nums) return -1; -int element = nums[0]; -struct bst *head = malloc(sizeof(struct bst)); -head->x=nums[0]; -head->occ =1; -head->left = NULL; -head->right = NULL; -for (int i=1; i(length/2)) element=nums[i]; -} -if (head) freeBST(head); -return element; -} -int main() { - int *nums = malloc(sizeof(int)); - int length=0; - char *input = readLine(); - if (input==NULL) { - printf("unable to read input!\n"); - return -1; - } - char *ptr=NULL; - ptr = strtok(input,","); - while (ptr!=NULL) { - int a = atoi(ptr); - length++; - if (length>1) nums=realloc(nums,(length+1)*sizeof(int)); - nums[length-1]=a; - ptr=strtok(NULL, ","); - } - - printf("%d\n", majorityElement(nums, length)); - -if (input) free(input); -if (nums) free(nums); -return 0; -}