【百度笔试】度度熊回家

题目:
一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?


思路:
笨办法,忽略每一个点都试试(将vec[i]=vec[i-1],实际上就是忽略了vec[i]),看看哪一个值最小。时间复杂度为   O ( n 2 ) \ O(n^{2})


代码实现:

#include <iostream>
#include <math.h>
#include <vector>
#include <limits.h>
using namespace std;

int main(){
    int n;
    cin >> n;
    vector<int> vec;
    for (int i = 0; i < n; ++i){
        int t;
        cin >> t;
        vec.push_back(t);
    }
    int min = INT_MAX;
    for (int i = 1; i < vec.size()-1; ++i){
        int tmp = vec[i];
        vec[i] = vec[i-1];
        int sum = 0;
        for (int j = 1; j < vec.size(); ++j){
            sum += abs(vec[j-1]-vec[j]);
        }
        if (sum < min){
            min = sum;
        }
        vec[i] = tmp;
    }
    
    cout << min << endl;
    
}

思路2:
我又看到https://www.cnblogs.com/love-yh/p/7421797.html中用的方法很巧妙。我们只需要考虑相邻的3个点就可以了,看看忽略掉中间这个点能省下多少路程,再把能省下的最大路程找出来。这样时间复杂度是O(n),效率更高。

发布了133 篇原创文章 · 获赞 2 · 访问量 4566

猜你喜欢

转载自blog.csdn.net/zxc120389574/article/details/105423632