zoukankan      html  css  js  c++  java
  • 跳水板

      你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。

      你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。

     

    示例:

    输入:

    shorter = 1

    longer = 2

    k = 3

    输出: {3,4,5,6}

     

    提示:

    0 < shorter <= longer

    0 <= k <= 100000

     

    方法一:使用 STL  里面的set ,本题由于通过两个数在原始数据上可能会大量产生重复的数字,所以,为了避免此问题的出现,我们采用set.

    #include<iostream>
    #include<set>
    #include<iterator>
    using namespace std;
    
    set<int> st,st1;
    set<int>::iterator it;
    int main(){
        int shorter,longer,k;
        cin>>shorter>>longer>>k;
        st.insert(0);
    
        for (int i = 0; i < k; i++)
        {
            st1=st;
            for (it = st.begin() ; it!=st.end(); it++)
            {
                st1.insert(*it+shorter);
                st1.insert(*it+longer);
            }
            st1.erase(st1.begin());
            st=st1;
        }
        for (it = st.begin() ; it!=st.end(); it++)
        {
           cout<<*it<<" ";
        }
        // cout<<st.size()<<endl;
    }

     

    方法2:递归

     

      k = 0 时竟然要返回空的 vector。长度为0的板不要面子的吗?

      当两种板子长度相同的时候,显然无论如何组合,跳板的长度均为 k*shorter。故只有一种长度。
      当两种板子的长度不相同的时候,可以组合出 k+1 种长度的跳板,证码过程如下:  

      首先,我们选择k块短板,此时长度为 k*shorter。这是一种方案。

      每用一块长板替换掉一块短板,跳板的长度就会增加 longer - shorter。故每替换一次,就会产生一种新方案。
      一共可以替换k次。故总共有 k + 1 种方案。

      频繁的push_back 有可能触发内存的频繁分配,如果预先知道push_back的次数,可以预先分配以提高效率。

     

    vector<int> divingBoard(int shorter, int longer, int k) {
            if(k == 0) {
                return vector<int>{};
            }
            if(shorter == longer) {
                return vector<int> {shorter * k};
            }
            vector<int> vec(k+1);
            for(int i = 0; i <= k; i++) {
                vec[i] = (k-i)*shorter + i*longer;
            }
            return vec;
     }

     

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

  • 相关阅读:
    百度网盘破解
    openstack2 kvm
    Openstack1 云计算与虚拟化概念
    Rsync + Sersync 实现数据增量同步
    Ansible 详解2-Playbook使用
    Ansible 详解
    Python mysql sql基本操作
    COBBLER无人值守安装
    ELK 环境搭建4-Kafka + zookeeper
    此坑待填 离散化思想和凸包 UVA
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/12976650.html
Copyright © 2011-2022 走看看