第 218 場周賽
給你乙個整數n
,請你將1
到n
的二進位制表示連線起來,並返回連線結果對應的十進位制數字對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...