算法面试通关40讲 - 番外 - 数组/抽象

1. 两数之和

space: \(O(n)\)
time: \(O(n)\)

class Solution {
    using index = pair<int, int>;
    static bool compare(index a, index b) { return a.second < b.second; }

   public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<index> indices;
        for (int i = 0; i < nums.size(); ++i) {
            indices.push_back({i, nums[i]});
        }
        sort(indices.begin(), indices.end(), compare);
        //                   v v j
        //   1 2 3 4 5 6 7 8 8 10
        // i ^ ^
        int targetright{};
        vector<int> ans = {0, 0};
        for (int i = 0, j = indices.size() - 1; i < j; ++i) {
            int targetj = target - indices[i].second;
            while (targetj < indices[j].second && i < j) {
                --j;
            }
            if (targetj == indices[j].second && i < j) {
                ans[0] = indices[i].first;
                ans[1] = indices[j].first;
                break;
            }
        }
        return ans;
    }
};
169. 多数元素

space: \(O(1)\)
time: \(O(n)\)

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int standout = 0;
        int num {};
        for (int n: nums) {
            if (standout == 0) {
                num = n;
            }
            if (n == num) {
                ++standout;
            } else {
                --standout;
            }
        }
        return num;
    }
};
121. 买卖股票的最佳时机

space: \(O(1)\)
time: \(O(n)\)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //
        //    /                    /\/
        //   /       /\         /\/
        //  /       /  \/     /
        //         /         /
        //                  /
        int low {INT_MAX};
        int profit {};
        for (int price: prices) {
            if (price < low) {
                low = price;
            } else {
                profit = std::max(profit, price - low);
            }
        }
        return profit;
    }
};
posted @ 2024-03-11 23:57  joel-q  阅读(2)  评论(0编辑  收藏  举报