題解/算法 {3012. 通过操作使数组长度最小}
@LINK: https://leetcode.cn/problems/minimize-length-of-array-using-operations/description/
;
比如[a...,b...,c...] (a<b<c)
, 通過執行a%b, a%c
最終他會變成[a...]
答案是(a的個數 + 1)/2
;
但是有一種特殊情況 [5,5,5,7]
, 此時應該先執行7%5=2
, 即[2,5,5,5]
然後執行2%5
變成[2]
;
即令mi: 最小值; cont: mi的個數
, 我們需要判斷 是否存在mii=x1%x2 是[1,mi)範圍
: @IF(存在)[答案是1
, 因爲會變成[mii,>mii]
]–@ELSE[答案是(cont+1)/2
];
int minimumArrayLength(vector<int>& A) {
auto mi = *min_element( A.begin(), A.end());
auto cont = std::count( A.begin(), A.end(), mi);
for( auto i : A){
if( i%mi != 0){ return 1;}
}
return (cont+1)/2;
}