c++ - "How to impress interviewers with my coding? What practices can I adopt in the code I' 已经为给面试官留下深刻印象的问题而写了吗?

标签 c++ algorithm vector coding-style

假设有一个整数 vector 。现在我们想要合并,我们选择 2 个相邻元素 v[I] 和 v[I+1](对于每个有效的 I)并执行 v[I] = v[I+1] + v[I]。并删除 v[I+1]。继续这样做,直到 vector 中只剩下一个元素。(注意 I=0 & I=v.size()-1 也被认为是相邻的)。所以我们需要尝试所有这些可能的组合(即我们首先采用哪一对并合并问题,如果需要进一步说明,请在评论中告诉我)

每次我们合并时,我们都会做成本+= v[I] + v[I+1]。目标是最小化成本。举个例子说 vector 是 1 2 3。合并 [1 2 3]-> [3 ,3] & cost=3 -> [6] & cost=9 另一种方式 [1 2 3]-> [1,5] & cost=5 -> [6] & cost=11 。那么他们是否有任何算法来生成具有给定约束的所有排列?

#include<bits/stdc++.h>
using namespace std;
int mn =INT_MAX;
void r(vector<int > v, int sum)
{
    if(v.size()==1){if( mn >sum) mn=sum; return ;}

    for(int i=0;i<v.size();i++)
    {
        sum+=v[i]+v[(i+1)%v.size()];
        v[i]=v[i]+v[(i+1)%v.size()];
        v.erase(v.begin()+(i+1)%v.size());
        r(v,sum);
    }
}
int main()
{
   vector<int> v;//suppose we gave some input to our vector 

   r(v,0);
   cout<<mn;
return 0;

}
#if you have a better solution, do state it, thankyou!

最佳答案

您的目标是给面试官留下深刻印象。
他们正在寻找可以在团队中工作并可以制作可重用代码的人,当需要切换到不同的主题进行工作时,可以将这些代码交给同事。

为此,学习

  • 养成解释代码的习惯,即写有用的注释
    • 按照“如果代码和注释不匹配,则可能都是错误的”写注释
    • 根据“我的评论帮助我在没有电脑的岛上度过三个月假期回来后理解我自己的代码”写评论
  • 停止使用全局变量,至少不要使用返回值
  • 为变量和函数使用不言自明的标识符
  • 查看 StackOverflow 问题,了解要改掉的可疑习惯(例如 Why should I not #include <bits/stdc++.h>?)
  • 了解何时进行优化,在不需要时进行优化通常是无益的
  • 学习针对特定目的进行优化

关于c++ - "How to impress interviewers with my coding? What practices can I adopt in the code I' 已经为给面试官留下深刻印象的问题而写了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57016753/

相关文章:

C++ 运算符重载 >>

python - python中拓扑排序的看似简单的实现

c++ - vector 元素是否保证有序?

r - 尝试矢量化 R 中的 for 循环

c++ - 是否可以更改类成员缓冲区的大小

c++ - 比较使用不同分配器的 STL 字符串

c++ - 继承和CRTP

java - 旅行推销员 - 如何找到不等价的排列

c++ - 高效获取数据的算法

c++ - 迭代器的类型 C++