zoukankan      html  css  js  c++  java
  • Leetcode 183场周赛

    Leetcode 183场周赛

    1

    #include <algorithm>
    
    class Solution {
    public:
        vector<int> minSubsequence(vector<int>& nums) {
            sort(nums.begin(), nums.end());//升序排列
            
            vector<int> ans;
            int sum[505];
            memset(sum,0,sizeof(sum));
            sum[0] = nums[0];
            for (int i = 1; i < nums.size(); i++) { //计算前缀和
                sum[i] =  sum[i-1] + nums[i];
            }
            
            for (int i = nums.size() - 2; i >= 0; i--) {
                if (sum[i] <sum[nums.size() - 1] - sum[i]) {
                    for (int j = nums.size() -1 ; j >= i +1 ;j--) {
                        ans.push_back(nums[j]);//降序插入到数组中
                    }
                    break;
                }
            }
            if (ans.size() == 0) return nums;
            
            return ans;
            
    
        }
    };
    

    2

    using namespace std;
    class Solution {
    public:
        int numSteps(string s) {
            long long x = 0;
            int  cnt = 0;
            long long d = 1;
            string s1 = "0",s2= "1";
            
            while (s.length() != 1 || s[0] !='1' ) {
                int index = s.length() - 1;
                if (s[index] == '0') {
                    s.pop_back();          
                }
                else if (s[index] == '1') {
                    
                    s[index] = '0';
                    for (int j = index - 1; j >= 0; j--) {
                        if (j == 0 && s[j] == '1') {
                            s[j] = '0';
                            s = s2 + s;
                            break;
                        }
                        if (s[j] == '1') { 
                            s[j] = '0';
                            continue;                      
                        }
                        else if (s[j] == '0') {
                            s[j] = '1';
                            break;
                        }     
                    }
                }
                cnt++;
                
            }
            return cnt;
    
        }
    };
    

    3

    /*
    
    假设给出数据为 a >= b >= c。其他情况也可经过排序转化为这种情况。
    
    首先拿出 c 个 'a', 'b', 'c' 进行拼接。
    再拿出 b-c 个 'a','b' 进行拼接。此时所有 'b','c' 都已拼接到答案中,仅剩 a-b 个 'a' 未拼接。
    然后可以通过暴力枚举将尽可能多的 'a' 插入到答案中。
    
    */
    
    class Solution {
        bool check(int pos, const string &str, const string &ch) {
            string a = str;
            a.insert(pos, ch);
            for(int i = 0; i+2 < a.size(); i++) {
                if(a[i] == ch[0] && a[i+1] == ch[0] && a[i+2] == ch[0]) {
                    return false;
                }
            }
            return true;
        }
    public:
        string longestDiverseString(int a, int b, int c) {
            vector<pair<int, string>> vec;
            vec.push_back(make_pair(a, string("a")));
            vec.push_back(make_pair(b, string("b")));
            vec.push_back(make_pair(c, string("c")));
            sort(vec.begin(), vec.end());
            string str;
            while(vec[0].first > 0) {
                vec[0].first --;
                vec[1].first --;
                vec[2].first --;
                str += vec[2].second;
                str += vec[1].second;
                str += vec[0].second;
            }
            while(vec[1].first > 0) {
                vec[1].first --;
                vec[2].first --;
                str += vec[2].second;
                str += vec[1].second;
            }
            while(vec[2].first > 0) {
                bool flag = false;
                for(int i = 0; i <= str.size(); i++) {
                    if(check(i, str, vec[2].second)) {
                        str.insert(i, vec[2].second);
                        flag = true;
                        break;
                    }
                }
                if(flag == false) {
                    break;
                }
                vec[2].first --;
            }
            return str;
        }
    };
    

    4

    class Solution {
    public:
    	string stoneGameIII(vector<int>& stoneValue) {
    		int len = stoneValue.size();
    
    
    		//dp[i]表示的含义是:先手者从i开始拿,最多能从剩余数组中得到多少领先
    		//初始化为0,,并且长度稍微大于len以便留一定的余量
    		vector<int> dp(len + 1, 0);
    
    		//根据题意,子问题都在当前问题的后面,要从后往前,确保之前的子问题已经求出解
    		for (int i = len - 1; i >= 0; i--) {
    			int mt = INT_MIN; //mt为从i开始取能获得的最大领先,初始化为负无穷
    			int sum = 0;//取的累计和
    
    			//尝试取1个,2个,3个 或者取到最末尾(j< len),然后求得不同取法的最大值,就是当前问题的解
    			for (int j = i; j < i + 3 && j < len; j++) {
    				sum += stoneValue[j]; //取的累计和
    				int t = sum - dp[j + 1]; // 取完后,轮到对手取了,所以要减去对手能获得的最大分数,就是自己的得分
    				mt = max(t, mt);
    			}
    			dp[i] = mt;
    
    		}
    		if (dp[0] > 0) return "Alice";
    		else if (dp[0] < 0) return "Bob";
    		else return "Tie";
    	}
    };
    
    
  • 相关阅读:
    spring boot 扫描不到自定义Controller
    SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程
    spring boot 中使用 jpa以及jpa介绍
    java8 快速实现List转map 、分组、过滤等操作
    Mysql 创建函数出现This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
    Spring mvc @initBinder 类型转化器的使用
    @RequestMapping 和@ResponseBody 和 @RequestBody和@PathVariable 注解 注解用法
    ssm的自动类型转换器
    如果将get请求转换成post请求
    如何将post请求转换成put和delete请求
  • 原文地址:https://www.cnblogs.com/DengSchoo/p/12643861.html
Copyright © 2011-2022 走看看