2024年2月17日 星期六

1642. Furthest Building You Can Reach

解題思路

我們可以用的有 ladder (無視兩鄉鄰建築物落差) 跟 brick。很直覺的是,我們肯定是把落差最大的那幾次用 ladder,其他幾次用 brick。

所以可以得知下面的公式:

落差總和 - 最大幾次總和 = 剩下來用 brick 補足的 <= 既有 brick 數


求最大幾次(用 ladder 的),可以用 minHeap 來完成,概念可參考 215. Kth Largest Element in an Array 這題。

程式碼
class Solution {
public:
    int furthestBuilding(vector<int>& heights, int bricks, int ladders) {
        long long int sum = 0, topKSum = 0, i;
        priority_queue<int, vector<int>, greater<int>> pq;

        for(i=1; i<heights.size(); i++)
        {
            int diff = heights[i] - heights[i-1];
            if(diff > 0)
            {
                sum += diff;
                topKSum += diff;
                pq.push(diff);
                if(pq.size() > ladders)
                {
                    topKSum -= pq.top();
                    pq.pop();
                }
                if(sum - topKSum > bricks)
                    break;
            }
        }
        return i-1;
    }
};

2024年2月7日 星期三

C++ 刷題常用模板

 1. 比較

bool cmp(<T>& a, <T>& b)

{

    return a > b;

}

sort(v.begin(), v.end(), cmp());


Note: cmp 裡面 return 的順序等於希望最終長怎樣的條件

2024年1月18日 星期四

2024年1月8日 星期一

Bad permissions. Try removing permissions for user......

問題:

用 ssh 連線時出現錯誤訊息:Bad permissions. Try removing permissions for user: LAPTOP-xxxxxx\\user2 on file C:/Users/user1/.ssh/config.


(user1 是我自己在用的帳號,user2 是電腦中存在但不是正在用的帳號。)


解決方法:

先進到 C:\Users\user1\.ssh

對 .ssh 右鍵 > 關閉繼承 > r將繼承的權限轉換物件的明確權限

接著把 user2 移除,最後按 apply


Done!


Ref:

https://stackoverflow.com/questions/49926386/openssh-windows-bad-owner-or-permissions

https://leesonhsu.blogspot.com/2021/03/ssh-key-windows-permission-denied.html