• 1046. 最后一块石头的重量


    1046. 最后一块石头的重量

    有一堆石头,每块石头的重量都是正整数。

    每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

    如果 x == y,那么两块石头都会被完全粉碎;
    如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
    最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。

     

    示例:

      输入:[2,7,4,1,8,1]
      输出:1
    解释:
    先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1],
    再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1],
    接着是 2 和 1,得到 1,所以数组转换为 [1,1,1],
    最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。

     方法一:暴力

    #include<iostream>
    #include<bits/stdc++.h>
    
    
    using namespace std;
    int main(){
        int arr[1001];
        vector<int >vec;
        int num;
        cin>>num;
        vec.push_back(num);
        while (cin.get()!='
    ')
        {
            cin>>num;
            vec.push_back(num);
        }
        sort(vec.begin(),vec.end());
        int x,y;
        int len =vec.size();
        // for (int i = 0; i < len; i++)
        // {
        //     cout<<vec[i]<<" ";
        // }
        cout<<endl;
        
        for (int i = len-1; i > 0; i--)
        {
            y=vec[i];
            x=vec[i-1];
            // cout<<"x= "<<x<<" y= "<<y<<endl;
            if (x==y)
            {
                vec[i-1]=0;
            }else if (x!=y)
            {
                vec[i-1]=y-x;
            }
            sort(vec.begin(),vec.begin()+i+1);
            // for (int k = 0; k <= i-1; k++)
            // {
            //     cout<<vec[k]<<" ";
            // }
            // cout<<endl;
        }
        cout<<vec[0]<<endl;
    }
    //2 7 4 1 8 1

     

    方法二:优先队列

    class Solution {
    public:
        int lastStoneWeight(vector<int>& stones) {
            priority_queue<int> pq;
            for(int v : stones) pq.push(v);
            while(pq.size() >= 2){
                int top1 = pq.top(); pq.pop();
                int top2 = pq.top(); pq.pop();
                int v = abs(top1 - top2);
                if(v) pq.push(v);
            }
            return pq.size() == 1 ? pq.top() : 0;
        }
    };

     

    方法三:桶排序

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13534191.html

  • 相关阅读:
    VS2017gets的使用
    UITableViewCell自定义高度
    登录注册页面的
    监听键盘- KeyBoard
    UITableViewDelete 删除
    UITabView 添加
    navigationbar背景图 设置左右按钮
    Navigation1 PUSH & POP
    母传键老师课堂笔记 -----ViewController的生命周期
    可折叠tableView
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13534191.html
Copyright © 2020-2023  润新知