LeetCode Day6 陣列變換 字串

2021-10-21 08:15:39 字數 1932 閱讀 8686

將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,所以把題目...