給定乙個只包含0或1的陣列,找出其中包含相同0的個數和1的個數的最
長子序列,輸出子串行的長度, 要求在o(n)的時間複雜度內完成。
如:對於陣列[0,0,1,1,0],輸出結果為4。子串行[0,0,1,1] 或
[0,1,1,0] 為符合條件的最長子序列,包含了兩個1和兩個0,個數相同。
思路:
將所有0變為-1 0和1數目相等 就變成了求子陣列和為0的最大長度
public static int maxlengthin01(int arr)
} int res = maxlength(arr, 0);
return res;
} public static int maxlength(int arr, int aim)
// key 某個累加和sum value 這個累加和最早出現的次數
// 取以每個位置為結尾的等於定值的子陣列的最大長度的最大值
hashmapmap = new hashmap<>();
map.put(0, -1); // 非常重要 意思是累加和為0 最早出現的位置為 -1 預設
int res = 0;
int sum = 0; // 字首和 到i位置
for (int i = 0; i < arr.length; i++)
if (!map.containskey(sum))
} return res;
}
再次改進公升級
若此不僅只有0和1 還有其他數 求0和1數目相等的最大子陣列的長度
依然簡單 可以將0變為-1 其他數字變為0 還是成了求累加和為0的題了
public static int maxlengthin01(int arr) else if(arr[i]!=0&&arr[i]!=1)
} int res = maxlength(arr, 0);
return res;
} public static int maxlength(int arr, int aim)
// key 某個累加和sum value 這個累加和最早出現的次數
// 取以每個位置為結尾的等於定值的子陣列的最大長度的最大值
hashmapmap = new hashmap<>();
map.put(0, -1); // 非常重要 意思是累加和為0 最早出現的位置為 -1 預設
int res = 0;
int sum = 0; // 字首和 到i位置
for (int i = 0; i < arr.length; i++)
if (!map.containskey(sum))
} return res;
}
實現只有0 1 2的陣列的排序
題目 乙個陣列中只有0,1,2三種元素,要求對這樣的陣列進行排序。第一眼看到這樣的題目,會舉得非常簡單,只需要兩次遍歷陣列就可以完成了。第一次遍歷,掃瞄陣列中的元素,每次遇到0則count0 遇到1則count1 遇到2則count2 這樣一趟下來就能夠統計出陣列中0,1,2的個數了。然後第二次遍歷...
01陣列建立
import numpy as np 陣列的建立 numpy的array函式傳入的物件是可迭代物件。一維陣列傳入乙個不巢狀的物件。arr1 np.array 4,5,2,6,3 二維陣列傳入巢狀迭代物件 arr2 np.array 1,2,5 6,8,25 26,52,71 print 一維陣列 n...
01 稀疏陣列
參考 韓順平資料結構和演算法 當乙個陣列 此處針對二維 中大部分元素為 或者為同乙個值的陣列時,可以採用稀疏陣列來儲存該陣列。通常定義乙個二維陣列去儲存資料,其中必定會有一些無效資訊 可以認為是0 所以乙個10 10的二維陣列,即使其中只有20個有效資料,如果不進行優化,需要占用100個資料空間 如...