LeetCode335. 路徑交叉

給定一個含有 n 個正數的數組 x。從點 (0,0) 開始,先向北移動 x[0] 米,然後向西移動 x[1] 米,向南移動 x[2] 米,向東移動 x[3] 米,持續移動。也就是說,每次移動後你的方位會發生逆時針變化。

編寫一個 O(1) 空間複雜度的一趟掃描算法,判斷你所經過的路徑是否相交。

示例 1:

┌───┐
│ │
└───┼──>

輸入: [2,1,1,2]
輸出: true
示例 2:

┌──────┐
│ │


└────────────>

輸入: [1,2,3,4]
輸出: false
示例 3:

┌───┐
│ │
└───┼>

輸入: [1,1,1,1]
輸出: true

有三種情況會出現交叉,分別是:
在這裏插入圖片描述
此時:x[i] >= x[i - 2] && x[i - 3] >= x[i - 1]

在這裏插入圖片描述
此時:x[i - 1] == x[i - 3] && x[i] >= x[i - 2] - x[i - 4]

在這裏插入圖片描述
此時:x[i - 2] >= x[i - 4] && x[i - 3] >= x[i - 1] && x[i - 1] >= x[i - 3] - x[i - 5] && x[i] >= x[i - 2 ]-x[i - 4]

    bool isSelfCrossing(vector<int>& x) {
		for (int i = 3; i < x.size(); i++)
		{
			if (x[i] >= x[i - 2] && x[i - 3] >= x[i - 1])
				return true;
			if (i >= 4 && x[i - 1] == x[i - 3] && x[i] >= x[i - 2] - x[i - 4])
				return true;
			if (i >= 5 && x[i - 2] >= x[i - 4] && x[i - 3] >= x[i - 1] && x[i - 1] >= x[i - 3] - x[i - 5] && x[i] >= x[i - 2 ]-x[i - 4])
				return true;
		}
		return false;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章