题解 | #小选货架#

小选货架

http://www.nowcoder.com/practice/72704cd9756944c2bb5de15b195ae2b4

  1. 使用从右向左逼近的思路去做。切左指针指向第一个元素,右指针指向第二个元素。如果二者之和小的话,那就都移动,当作放过了。如果二者之和大的话,那就之移动最大的。记住提前升序排序。
  2. 指针如果发生移动就证明这个货物已经放了。
#include<bits/stdc++.h>

using namespace std;

int main(){
    int x;

    while(cin>>x){
        int a;
        vector<int> res;
        while(cin>>a){
            res.push_back(a);
        }
        int ans =0,temp =0;
        sort(res.begin(),res.end());

        int l = 0, r = res.size()-1;//从两边开始

        while(r>=0&& l<=res.size()-1&& r>=l){
            if(res[r]==x){
                ans++;
                r--;
            }else if(res[l]+res[r]<=x){
                ans++;
                l++;
                r--;
            }else{
                ans++;
                r--;
            }
        }


        cout<<ans<<endl;
    }

    return 0;
}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务