第 218 場周賽

2021-10-12 01:22:55 字數 1968 閱讀 2699

第 218 場周賽

給你乙個整數n,請你將1n的二進位制表示連線起來,並返回連線結果對應的十進位制數字對109 + 7取餘的結果。

const int mod=1e9+7;

int getfirstone(int num)

return i+1;

}int concatenatedbinary(int n)

ans=(ans< int:

ans=0

mod=10**9+7

for num in range(1,n+1):

b=bin(num)[2:];

cnt=len(b);

ans=(ans<5619. 最小不相容性

給你乙個整數陣列 nums​​​ 和乙個整數 k 。你需要將這個陣列劃分到 k 個相同大小的子集中,使得同乙個子集裡面沒有兩個相同的元素。

乙個子集的 不相容性 是該子集裡面最大值和最小值的差。

請你返回將陣列分成 k 個子集後,各子集 不相容性 的 和 的 最小值 ,如果無法分成分成 k 個子集,返回 -1 。

子集的定義是陣列中一些數字的集合,對數字順序沒有要求。

示例 1:

輸入:nums = [1,2,1,4], k = 2

輸出:4

解釋:最優的分配是 [1,2] 和 [1,4] 。

不相容性和為 (2-1) + (4-1) = 4 。

注意到 [1,1] 和 [2,4] 可以得到更小的和,但是第乙個集合有 2 個相同的元素,所以不可行。

示例 2:

輸入:nums = [6,3,8,1,3,1,2,2], k = 4

輸出:6

解釋:最優的子集分配為 [1,2],[2,3],[6,8] 和 [1,3] 。

不相容性和為 (2-1) + (3-2) + (8-6) + (3-1) = 6 。

示例 3:

輸入:nums = [5,3,3,6,3,3], k = 3

輸出:-1

解釋:沒辦法將這些數字分配到 3 個子集且滿足每個子集裡沒有相同數字。

1 <= k <= nums.length <= 16

nums.length 能被 k 整除。

1 <= nums[i] <= nums.length

基本思路:使用dfs,但是要注意剪枝

int ans=int_max;

int k;

int per;

void dfs(vector&cur,vector&cnt,int tmp,int step,vector&nums)

for(int i=0;i& nums, int k)

sort(nums.begin(),nums.end());

vectorcur(k,-1);

vectorcnt(k,0);

this->k=k;

this->per=n/k;

dfs(cur,cnt,0,0,nums);

return ans;

}

基本思路:動態規劃,先做預備工作,找到所有符合條件的小集合,然後篩選,其中,對於f[mask],mask表示的是二進位制**中為1的已經分配好集合了,而f[mask]表示的是最小相容差

class solution 

int n=nums.size();

int m=(1vectorfrequent(n+1,0);

for(int i=1;i1)

}

if(flag)

}value[i]=ub-lb;

//coutf[0]=0;

for(int mask=1;maskelse}}

}}

return f[m-1];

}};

第123場周賽

1,989.陣列形式的整數加法 方法一 逐位相加 思路 讓我們逐位將數字加在一起。舉乙個例子,如果要計算 123 與 912 的和。我們順次計算 3 2 2 1 1 9。任何時候,當加法的結果大於等於 10 我們要將進製的 1 加入下一位的計算中去,所以最終結果等於 1035。演算法 我們可以對以上...

第191場周賽

class solution return res 這裡有個注意的點,maxh maxw這兩個int的值的乘積會超過int的範圍,所以要先轉換為double class solution maxh maxh h horizontalcuts hcut 1 maxh h horizontalcuts ...

第193場周賽

class solution return res class solution map maps new treemap int len arr.length int max 1 for int i 0 i else int totoalnum maps.size arraylist sorted...