將n*n的二維矩陣,順時針旋轉90°,輸出旋轉後的矩陣。要求直接修改輸入的矩陣,即不增加額外的空間複雜度。
①可以觀察到,陣列順時針旋轉後,第i行元素成為第n-1-i列元素,原先在第幾列現在就在第幾行。即:(i,j)->(j,n-1-i),以此類似,原先為(j,n-1-i)的元素變為(n-1-i,n-1-j),接著(n-1-i,n-1-j)->(n-1-j,i)->(i,j),一次迴圈結束。每次變化4個值,總迴圈的次數為n^2/4。
②第二種思路是先把陣列上下翻轉,(i,j)->(n-1-i,j),然後再沿對角線翻轉,(n-1-i,j)->(j,n-1-i),與①結果相同。
class solution }}
;
class solution
};
陣列從i~j元素的和,包括i,j元素,需要重複呼叫sumrange函式,因此要盡可能降低時間複雜度。
字首和,時間複雜度o(1)
初始化時,對陣列進行預處理,用新陣列儲存當前元素之前的元素和,這樣在呼叫sumrange函式時,只需新陣列第j個元素-第i個元素即為所求。
class numarray
intsumrange
(int i,
int j)};
/** * your numarray object will be instantiated and called as such:
* numarray* obj = new numarray(nums);
* int param_1 = obj->sumrange(i,j);
*/
和前題類似,由一維變到了二維,一種方法是將每行的字首和存下來,再求子矩形範圍內元素的總和。
第二種思路,二維字首和,sums(i,j)為右下角為(i,j)的範圍內元素和,則所求左上角為 (row1, col1) ,右下角為 (row2, col2),元素和為sums (row2, col2)-sums(row1-1,col2)-sums(row2,col1-1)+sums(row1-1,col1-1)。
class nummatrix }}
intsumregion
(int row1,
int col1,
int row2,
int col2)};
/** * your nummatrix object will be instantiated and called as such:
* nummatrix* obj = new nummatrix(matrix);
* int param_1 = obj->sumregion(row1,col1,row2,col2);
*/
output[i]為陣列中除nums[i]外其他元素的乘積。
考慮用兩個陣列,類似字首和,分別儲存當前元素之前的積、當前元素之後的積,output[i]即為兩個陣列i位置元素相乘。
可以優化,不用再新建陣列,用output儲存當前元素之前的元素和,再從最右邊元素開始累乘,與相應的output[i]相乘。
class solution
};
class solution
return output;}}
;
class solution
else
if(count==n)
return true;
return false;}}
;
縱向比較,依次比較每個字串的每個字元,用s記錄公共部分,只要不一樣就輸出s。
class solution
s+=temp;}}
return s;}}
;
每天都要LeetCode Day 6
今天的題目是將乙個zigzag 的string以橫向輸出的方式返回 這道題有點複雜,function中輸入乙個string和zigzag行數,以string的zigzag排列的橫向值輸出。我的思路是先將輸入排成zigzag的樣子,然後再將橫向的值輸出。首先把輸入的string轉成char array...
LeetCode Day1 P189 旋轉陣列
是2021.1.8的每日一題,不過拖到了今天才來完成。一開始很直接的思路就是利用python處理陣列的拼接,比較輕鬆的就寫出來了,用時28ms,記憶體15mb。class solution def rotate self,nums list int k int none do not return ...
LeetCode Day2 統計陣列中的元素
題目 645 697 陣列中包含1 n,缺乙個,有乙個數字重複。eg nums 1,2,2,4 重複的數字為2,缺少的數字為3。要注意陣列是無序的 將陣列中數字出現的次數存在map中,次數為0即為缺少的數 次數為2,為重複的數。學到的一種新思路,使用異或。個人理解,相同的數字異或結果為0,所以把題目...