leetcode:形成兩個異或相等陣列的三元組數目
題目描述:
給你乙個整數陣列 arr 。
現需要從陣列中取三個下標 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。
a 和 b 定義如下:
a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]
注意:^ 表示 按位異或 操作。
請返回能夠令 a == b 成立的三元組 (i, j , k) 的數目。
示例:
輸入:arr = [2,3,1,6,7]
輸出:4
解釋:滿足題意的三元組分別是 (0,1,2), (0,2,2), (2,3,4) 以及 (2,4,4)
思想:
理解這一點:「a==b」相當於「a ^ b == 0」。問題就變得簡單了。遍歷所有(i,k)區間即可。
關鍵是「a^b==0」這點太難想到了
**:
class solution
if(!success(bloomday,max)) return -1;
return binarysearch(bloomday,0,max);
}private int binarysearch(int bloomday, int low, int high)
}
leetcode:最小體力消耗路徑
題目描述:
示例:
輸入:heights = [[1,2,2],[3,8,2],[5,3,5]]
輸出:2
解釋:路徑 [1,3,5,3,5] 連續格仔的差值絕對值最大為 2 。
這條路徑比路徑 [1,2,2,2,5] 更優,因為另一條路勁差值最大值為 3 。
思想:方法一:二分查詢+bfs程式設計技巧:主要思想:看完題目,我的思路是如何通過遍歷一遍得到最小「體力耗費值」,這種思路很難。換個方向去想,如果給定「體力耗費值」s,判斷當前s下能否到達目的地,就簡單多了,使用bfs搜尋+記憶化來完成。外層遍歷這個s可使用二分查詢。
1.將bfs搜尋的方法獨立出來,更清晰;
2.boolean seen = new boolean[len*wid]可記憶已被遍歷過的節點(無需設定成二維);
3.每個節點取子節點有四個方向,可用乙個陣列存這四個方向:static int dirs = new int,,,};
4.注意,更新seen陣列時機,應該在取到子節點時候,而不是節點出隊之後,不然會超時。
**:
class solution
}public int minimumeffortpath(int heights) }}
return seen[len*wid-1];
}private boolean inrange(int nx,int ny,int len,int wid)
}
leetcode:將 x 減到 0 的最小運算元
題目描述:
給你乙個整數陣列 nums 和乙個整數 x 。每一次操作時,你應當移除陣列 nums 最左邊或最右邊的元素,然後從 x 中減去該元素的值。請注意,需要 修改 陣列以供接下來的操作使用。
如果可以將 x 恰好 減到 0 ,返回 最小運算元 ;否則,返回 -1 。
示例:
輸入:nums = [3,2,20,1,1,3], x = 10
輸出:5
解釋:最佳解決方案是移除後三個元素和前兩個元素(總共 5 次操作),將 x 減到 0 。
思想:
思想:外部最小即找中間最大。用滑動視窗找最長的片段使得sum(片段)=sum(nums)-x
**:
class solution
int total = sum - x;
int current = nums[0];
int low=0,high=1;
int res = len+1;
while(low<=high&&hightotal)
if(current==total) 中,[2,6] 最具競爭力。
思想:
在乙個無序陣列中找乙個有序序列,考慮使用單調棧來記憶。
直接通過k來確定棧中元素大小,這樣不合適,因為棧中元素是動態變化的。但是使用逆向思維,通過k可以確定 n-k,即可以確定出棧元素數量,控制出棧數量為n-k,剩下來的就是目標序列了。
**:
class solution
stack.push(item);
}while(popnum>0)
int res = new int[k];
for(int i=k-1;i>=0;--i)
return res;
}}
演算法與資料結構實驗題1 9
實驗任務 上回說到,你奔走於各個世界線拯救靜靜。現在,完成任務的你決定玩個簡單的遊戲靜一靜。我們知道,數字在計算機裡是用二進位制儲存的,現在你想知道如果把乙個數字的二進位制倒過來是多少。比如 int a 5,用二進位制表示就是00000000000000000000000000000101。把它倒過...
演算法與資料結構 刷題日記
各種排序時間 空間複雜度 穩定性總結 一般把快排的空間複雜度看作o l ogn o logn o logn n個頂點的無向圖的鄰接矩陣有n個表頭節點,每個節點擊作乙個表頭,即可建立鄰接表。二叉排序樹 binary sort tree 或者是一棵空樹 或者是具有下列性質的二叉樹 憨憨題 若二叉樹用二叉...
資料結構與演算法 演算法 演算法和資料結構
資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...