题解 | #游游的除2操作#

游游的除2操作

https://www.nowcoder.com/practice/b797f46aa75145a0bbe112099f7cbd18

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    if (n == 1) {
        cout << 0;
        return 0;
    }
    int temp;
    vector<int> vec;
    for (int i = 0; i < n; ++i) {
        cin >> temp;
        vec.push_back(temp);
    }
    int size = 1;
    int sum = 0;
    for (int i = 0; i < n - 1; ++i) {
        while (vec[i] != vec[i + 1]) {
            if (vec[i] > vec[i + 1]) {
                vec[i] = vec[i] >> 1;
                sum = sum + size;
            } else {
                vec[i + 1] = vec[i + 1] >> 1;
                ++sum;
            }
        }
        ++size;
    }
    cout << sum << endl;
}
// 64 位输出请用 printf("%lld")

将所有的数保存下来;

从头到尾两两比较,除以2,使其相等。

在循环的同时,记录下之前有多少个数字相同,

比如2 2 2 2 1 比较到2 和 1时,应该是2 / 2一次变化,但是前面已经有4个数相同了,所以变化实际需要进行4次。

如果是 1 1 1 1 2,只需要一次。

所以就是在两两比较时,分情况,

这样,遍历到最后时间复杂率是On。

全部评论

相关推荐

高通滤波器v:我最近投的几个,都是要不已读不回,要不不回,还有直接拒绝的
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务