zoukankan      html  css  js  c++  java
  • [思维]牛客编程巅峰赛S1第6场

    -----> C思路没错,下标写错了,recheck is necessary

    A 简单题

    class Solution {
    public:
        /**
         * 位移后二进制串的十进制值
         * @param str string字符串 二进制字符串
         * @param k int整型 循环位移次数
         * @return long长整型
         */
        long long rotateRight(string str, int k) {
            // write code here
            long long ret = 0;
            for(int i = str.length() - k; i < str.length(); ++i) {
                ret = ret * 2 + (str[i] - '0');
            }
            for(int i = 0; i < str.length() - k; ++i) {
                ret = ret * 2 + (str[i] - '0');
            }
            return ret;
        }
    };

    B 简单思维,用SET收敛非奇即可

    class Solution {
    public:
        /**
         * 返回一个数,代表让这些数都变成奇数的最少的操作次数
         * @param n int整型 代表一共有多少数
         * @param a int整型vector 代表n个数字的值
         * @return int整型
         */
        int solve(int n, vector<int>& a) {
            // write code here
            set <int> ST;
            for(auto x : a) {
                if(x % 2 == 0) {
                    ST.insert(x);
                }
            }
            int ret = 0;
            while(!ST.empty()) {
                auto x = --ST.end();
                ++ret;
                if ( (*x) >> 1 & 1) {
                    ST.erase(x);
                    continue;
                } else {
                    ST.erase(x);
                    ST.insert((*x) >> 1);
                }
            }
            return ret;
        }
    };

    C  简单构造,排反序后交叉排列即可

    class Solution {
    public:
        /**
         * ​返回按照这些花排成一个圆的序列中最小的“丑陋度”
         * @param n int整型 花的数量
         * @param array int整型vector 花的高度数组
         * @return int整型
         */
        int solve(int n, vector<int>& arr) {
            // write code here
            sort(arr.rbegin(), arr.rend());
            deque<int> dq;
            for(int i = 0; i < arr.size(); ++i) {
                if(i & 1) {
                    dq.push_back(arr[i]);
                } else {
                    dq.push_front(arr[i]);
                }
            }
            int ans = 0;
            for(int i = 1; i < n; ++i) {
                ans = max(ans, std::abs(dq[i] - dq[i - 1]));
            }
            ans = max(ans, std::abs(dq[0] - dq[n - 1]));
            return ans;
        }
    };
  • 相关阅读:
    [LeetCode]4Sum
    [LeetCode]3Sum
    [LeetCode]Two Sum
    [LeetCode]Maximal Rectangle
    [LeetCode]Largest Rectangle in Histogram
    [LeetCode]Sudoku Solver
    [LeetCode]Group Anagrams
    jQuery验证控件jquery.validate.js使用说明+中文API
    js操作cookie,实现登录密码保存
    Java中getResourceAsStream的用法
  • 原文地址:https://www.cnblogs.com/zeolim/p/13378740.html
Copyright © 2011-2022 走看看