zoukankan      html  css  js  c++  java
  • LeetCode周赛#202

    A. 存在连续三个奇数的数组

    给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false

    1 <= arr.length <= 1000
    1 <= arr[i] <= 1000

    class Solution {
    public:
        bool threeConsecutiveOdds(vector<int>& arr) {
            int a = 0,b = 1,c = 2;
            while(c < arr.size()){
                if((arr[a]&1)&&(arr[b]&1)&&(arr[c]&1)) return true;
                a++;b++;c++;
            }
            return false;
        }
    };
    

    B. 使数组中所有元素相等的最小操作数

    存在一个长度为 n 的数组 arr ,其中 arr[i] = (2 * i) + 1 ( 0 <= i < n )。

    一次操作中,你可以选出两个下标,记作 xy ( 0 <= x, y < n )并使 arr[x] 减去 1 、arr[y] 加上 1 (即 arr[x] -=1arr[y] += 1 )。最终的目标是使数组中的所有元素都 相等 。题目测试用例将会 保证 :在执行若干步操作后,数组中的所有元素最终可以全部相等。

    给你一个整数 n,即数组的长度。请你返回使数组 arr 中所有元素相等所需的 最小操作数 。

    class Solution {
    public:
        int minOperations(int n) {
            int ans = 0;
            for(int i = 0;i <=(n-1)/2;i++){
                ans += (n - 2*i -1);
            }
            return ans;
        }
    };
    

    C. 两球之间的磁力

    在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有 n 个空的篮子,第 i 个篮子的位置在 position[i] ,Morty 想把 m 个球放到这些篮子里,使得任意两球间 最小磁力 最大。

    已知两个球如果分别位于 xy ,那么它们之间的磁力为 |x - y|

    给你一个整数数组 position 和一个整数 m ,请你返回最大化的最小磁力。

    思路:

    二分答案

    class Solution {
    public:
        bool judge(int k,vector<int>& p,int m){
            int n = p.size();
            
            int now = p[0];
            int cnt = 1;
            auto x = p.begin();
            
            while(cnt < m){
                x = lower_bound(x,p.end(),now+k);
                if(x == p.end())return false;
                now = *x;
                cnt++;
            }
            return true;
        }
        int maxDistance(vector<int>& position, int m) {
            sort(position.begin(),position.end());
            
            int l = 1,r = position[position.size()-1] - position[0];
            int ans = 0;
            
            while(l <= r){
                int mid = l + r >> 1;
                if(judge(mid,position,m)){
                    l = mid + 1;
                    ans = max(ans,mid);
                }
                else{
                    r = mid - 1;
                }
                
            }
            return ans;
        }
    };
    

    D. 吃掉N个橘子的最少天数

    厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:

    • 吃掉一个橘子。
    • 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。
    • 如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。

    每天你只能从以上 3 种方案中选择一种方案。

    请你返回吃掉所有 n 个橘子的最少天数。

    1 <= n <= 2*10^9

    思路:

    记忆化搜索,复杂度并不会到2e9,因为不需要一直减1。

    class Solution {
    public:
        
        map<int,int>ans;
        int solve(int n){
            if(ans.count(n) != 0)return ans[n];
            if(n == 1)return ans[1] = 1;
            if(n % 2 == 0 && n % 3 == 0){
                return ans[n] = min(solve(n/2),solve(n/3)) + 1;
            }
            if(n % 2 == 0 && n % 3 != 0){
                return ans[n] = min(solve(n/2),solve(n-1)) + 1;
            }
            if(n % 2 != 0 && n % 3 == 0){
                return ans[n] = min(solve(n-1),solve(n/3)) + 1;
            }
            return ans[n] = solve(n-1) + 1;
        }
        int minDays(int n) {
            return solve(n);
        }
    };
    
  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/sduwh/p/13515603.html
Copyright © 2011-2022 走看看