Zenefits 第一轮编程题

来源:互联网 发布:网络与手机失泄密 编辑:程序博客网 时间:2024/04/25 22:09

两道题都是所有test cases都过了,直接贴代码了

/* * #1 Flip bit */int bitFlip(int arr_size, int* arr) {    int no_flip = 0;    int flip = 0, flip_min = 0;    int i = 0;    int *transform = NULL;        // Validting input    if ((arr_size == 0) || (arr == NULL)) return 0;        transform = (int*)malloc(sizeof(int) * arr_size);    for (i = 0; i < arr_size; i++) {        no_flip += arr[i];        if (arr[i] == 0) {            transform[i] = 1;        } else {            transform[i] = -1;        }    }    for (i = 0; i < arr_size; i++) {        if (flip + transform[i] >= 0) {            flip += transform[i];        } else {            flip = 0;        }        if (flip_min < flip) {            flip_min = flip;        }    }        free(transform);    return (no_flip + flip_min);}/* * #2 Uneaten leaves */// Calculate greatest common divisorstatic long gcd(long a, long b) {    while (b != 0) {        long t = b;        b = a % b;         a = t;    }    return a;}// Calculating least common multiplierstatic long lcm(long a, long b) {    return a * b / gcd(a, b);}int countUneatenLeaves(int N, vector < int > A) {    int eaten = 0;    vector<vector<int>> allSets;    vector<int> sol;    allSets.push_back(sol);    for(int i=0; i<A.size(); i++) {        int n = allSets.size();        for(int j=0; j<n; j++) {            // Finding a subset            sol = allSets[j];            sol.push_back(A[i]);                        // Calculating the least common multiplier            int lcm_cur = sol[0];            int n = sol.size();            for (int i = 1; i < n; i++) {                lcm_cur = lcm(lcm_cur, sol[i]);            }                        // Calculating the eaten leaves by this subset            int cur_eaten = N / lcm_cur;                        // Modifying total eaten leaves            eaten += n % 2 == 1 ? cur_eaten : -cur_eaten;                        allSets.push_back(sol);        }    }       return (N-eaten);}


0 0
原创粉丝点击