当前位置:   article > 正文

9.4 美团2024届秋招笔试第一场_小美的排列构造

小美的排列构造

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)

4.小美的排列询问

小美拿到了一个排列。她想知道在这个排列中,x和y是否是相邻的。你能帮帮她吗?

排列是指一个长度为n的数组,其中 1 到n每个元素恰好出现一次。

输入描述:

输出描述:

思路:利用每个元素只出现一次,每个元素能“记住”自己“附近”的元素则很简单能完成。用哈希表来保存,key为自己,val为前一个元素;

代码实现:

  1. #include <iostream>
  2. #include <unordered_map>
  3. using namespace std;
  4. int main() {
  5. int n,pre=0;
  6. //每个元素只出现一次
  7. cin>>n;
  8. //key为保存的元素,val为该元素的上一个元素,无上一个则为0
  9. unordered_map<int,int> m;
  10. for(int i=0;i<n;i++)
  11. {
  12. int a=0;
  13. cin>>a;
  14. m[a]=pre;
  15. pre=a;
  16. }
  17. int x,y;
  18. cin>>x>>y;
  19. if(m[x]==y||m[y]==x)
  20. {
  21. cout<<"Yes"<<endl;
  22. }
  23. else cout<<"No"<<endl;
  24. return 0;
  25. }

5.小美的排列构造

小美定义一个数组a的权值计算如下:

首先将a的每一对相邻两项求和,得到一个b数组。那么b数组的最大值减最小值即为a数组的权值。

例如,若a=[2,1,3],那么b=[3,4],b数组的极差是1。因此a数组的权值为1。

现在小美希望你能构造一个长度为n的排列,满足权值尽可能小。你能帮帮她吗?

排列是指一个长度为n的数组,其中 1 到n每个元素恰好出现一次。

 输入描述:

输出描述:

思路:b数组元素=a数组元素相邻数的和,要让b数组的最大值-最小值最小,则只要让a数组中小大小大。。。这样元素排列。

代码实现:

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main() {
  5. int n=0;
  6. cin>>n;
  7. int low=1,high=n;
  8. vector<int> v;
  9. while(low<=high)
  10. {
  11. if(low==high)
  12. {
  13. v.push_back(low);
  14. break;
  15. }
  16. v.push_back(low);
  17. v.push_back(high);
  18. low++;
  19. high--;
  20. }
  21. for(auto e:v)
  22. {
  23. cout<<e<<" ";
  24. }
  25. cout<<endl;
  26. return 0;
  27. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/802340
推荐阅读
相关标签
  

闽ICP备14008679号