当前位置:网站首页>Leetcode skimming - game 280
Leetcode skimming - game 280
2022-07-02 23:57:00 【AI Xing】
The first 280 Weekly match
6004. obtain 0 The number of operations
subject
Here are two for you non-negative Integers num1 and num2 .
Each step operation in , If num1 >= num2 , You have to use num1 reduce num2 ; otherwise , You have to use num2 reduce num1 .
for example ,num1 = 5 And num2 = 4 , Should use the num1 reduce num2 , therefore , obtain num1 = 1 and num2 = 4 . However , If num1 = 4 And num2 = 5 , After one step operation , obtain num1 = 4 and num2 = 1 .
Return to make num1 = 0 or num2 = 0 Of Operands .
Example 1:
Input :num1 = 2, num2 = 3
Output :3
explain :
- operation 1 :num1 = 2 ,num2 = 3 . because num1 < num2 ,num2 reduce num1 obtain num1 = 2 ,num2 = 3 - 2 = 1 .
- operation 2 :num1 = 2 ,num2 = 1 . because num1 > num2 ,num1 reduce num2 .
- operation 3 :num1 = 1 ,num2 = 1 . because num1 == num2 ,num1 reduce num2 . here num1 = 0 ,num2 = 1 . because num1 == 0 , No more action is required . So the total operand is 3 .
Example 2:
Input :num1 = 10, num2 = 10
Output :1
explain :
- operation 1 :num1 = 10 ,num2 = 10 . because num1 == num2 ,num1 reduce num2 obtain num1 = 10 - 10 = 0 . here num1 = 0 ,num2 = 10 . because num1 == 0 , No more action is required .
So the total operand is 1 .
Tips :
0 <= num1, num2 <= 10^5
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/count-operations-to-obtain-zero
analysis
The simulation will time out if it is carried out directly according to the topic , So we need to simplify it . We assume that num1 Than num2 Much larger , Then you have to subtract many times , Until the reduced number ratio num2 Xiaozhi , The last number is the original num1 % num2, The number of times they directly subtract is num1 / num2, We can simulate according to this feature .
Code
class Solution {
public:
int countOperations(int num1, int num2) {
int cnt=0;
if(num1 == 0 || num2 == 0){
return 0;
}
if(num1 < num2){
int tmp = num1;
num1 = num2;
num2 = tmp;
}
while(num1 % num2){
cnt += num1 / num2;
int tmp = num1 % num2;
num1 = num2;
num2 = tmp;
}
cnt += num1 / num2;
return cnt;
}
};
6005. The minimum number of operands to make an array an alternating array
subject
I'll give you a subscript from 0 Starting array nums , The array consists of n It's made up of four positive integers .
If the following conditions are met , The array nums It's a Alternating array :
nums[i - 2] == nums[i]
, among 2 <= i <= n - 1
.nums[i - 1] != nums[i]
, among 1 <= i <= n - 1
.
In one step operation in , You can choose the subscript i And will nums[i] change by any Positive integer .
Returns the that makes the array an alternating array The minimum number of operands .
Example 1:
Input :nums = [3,1,3,2,4,3]
Output :3 explain : One way to turn an array into an alternating array is to convert the array to [3,1,3,1,3,1].
under these circumstances , The operands are 3 . Can prove that , Operands are less than 3 Under the circumstances , Cannot make an array into an alternating array .
Example 2:
Input :nums = [1,2,2,2,2]
Output :2 explain : One way to turn an array into an alternating array is to convert the array to [1,2,1,2,1].
under these circumstances , The operands are 2 .
Be careful , Array cannot be converted to [2,2,2,2,2] . Because in this case ,nums[0] == nums[1], The condition of alternating array is not satisfied .
Tips :
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^5
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/minimum-operations-to-make-the-array-alternating
analysis
According to the topic, we can change our thinking to find the most positions that do not need to be replaced , In this way, the position that needs to be modified is minimized , We count the number of odd and even digits respectively , Then calculate according to the situation that it is not replaced at most .
Code
class Solution {
public:
int minimumOperations(vector<int>& nums) {
vector<int> a, b;
map<int, int> ma, mb;
if(nums.size()==1){
return 0;
}
for(int i=0; i < nums.size(); i++){
if(i % 2 == 0){
if(ma[nums[i]]==0){
a.push_back(nums[i]);
}
ma[nums[i]]++;
}else{
if(mb[nums[i]]==0){
b.push_back(nums[i]);
}
mb[nums[i]]++;
}
}
int mxa=0, mxb=0;
int aa, bb, ans=0;
for(int i=0; i < a.size(); i++){
if(mxa < ma[a[i]]){
mxa = ma[a[i]];
aa=a[i];
}
}
for(int i=0; i < b.size(); i++){
if(b[i] != aa && mxb < mb[b[i]]){
mxb = mb[b[i]];
}
}
ans = mxa + mxb;
mxa =0, mxb = 0;
for(int i=0; i < b.size(); i++){
if(mxb < mb[b[i]]){
mxb = mb[b[i]];
bb = b[i];
}
}
for(int i=0; i < a.size(); i++){
if(a[i] != bb && mxa < ma[a[i]]){
mxa = ma[a[i]];
aa=a[i];
}
}
ans = max(ans, mxa + mxb);
return nums.size()-ans;
}
};
2171. Take out the smallest number of magic beans
To give you one just An array of integers beans , Each integer represents the number of magic beans in a bag .
Please... From each bag take out Some beans ( It's fine too Don't take out ), Make the rest Non empty In the bag ( namely At least also One Magic bean bag ) Number of magic beans equal . Once the magic beans are removed from the bag , You can't put it in any other bag .
Please return to where you need to take out the magic beans Minimum number .
Example 1:
Input :beans = [4,1,6,5]
Output :4
explain :
- We never had 1 Take it out of a magic bean bag 1 A magic bean . The number of magic beans left in the bag is :[4,0,6,5]
- Then we have 6 Take it out of a magic bean bag 2 A magic bean . The number of magic beans left in the bag is :[4,0,4,5]
- Then we have 5 Take it out of a magic bean bag 1 A magic bean . The number of magic beans left in the bag is :[4,0,4,4] A total of 1 + 2 + 1 = 4 A magic bean , The number of magic beans left in the non empty bag is equal . Nothing is better than taking out 4 A plan with fewer magic beans .
Example 2:
Input :beans = [2,10,3,2]
Output :7
explain :
- We never had 2 Take it out of one of the bags of magic beans 2 A magic bean . The number of magic beans left in the bag is :[0,10,3,2]
- Then we have... From another 2 Take it out of a magic bean bag 2 A magic bean . The number of magic beans left in the bag is :[0,10,3,0]
- Then we have 3 Take it out of a magic bean bag 3 A magic bean . The number of magic beans left in the bag is :[0,10,0,0] A total of 2 + 2 + 3 = 7 A magic bean , The number of magic beans left in the non empty bag is equal . Nothing is better than taking out 7 A plan with fewer magic beans .
Tips :
1 <= beans.length <= 10^5
1 <= beans[i] <= 10^5
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/removing-minimum-number-of-magic-beans
analysis
First pair beans Sort , Then find the prefix sum , Suppose we finally get a length of beans[i] Then the number of beans taken out is the first i-1 Add the sum of beans in position i+1 Later ratio beans[i] More beans .
Code
class Solution:
def minimumRemoval(self, beans: List[int]) -> int:
beans = sorted(beans)
summ = sum(beans)
ans = summ
length = len(beans)
for i in range(length):
ans = min(ans, summ - (length-i) * beans[i])
return ans
6007. The maximum sum of the array
Give you a length of n Array of integers for nums And an integer numSlots , Satisfy 2 * numSlots >= n . All in all numSlots Baskets , The number is 1 To numSlots .
You need to put all n Divide the whole number into these baskets , And each basket at most Yes 2 It's an integer . Of a distribution scheme With and Defined as the number of each number and its basket Bitwise and operation The sum of the results .
For example , The digital [1, 3] Put it in the basket 1 in ,[4, 6] Put it in the basket 2 in , The sum of this scheme is (1 AND 1) + (3 AND 1) + (4 AND 2) + (6 AND 2) = 1 + 1 + 0 + 2 = 4 .
Please return and will nums Put all numbers in numSlots The largest of the baskets and .
Example 1:
Input :nums = [1,2,3,4,5,6], numSlots = 3
Output :9
explain : One possible solution is [1, 4] Put it in the basket 1 in ,[2, 6] Put it in the basket 2 in ,[3, 5] Put it in the basket 3 in . The maximum sum of and is (1 AND 1) + (4 AND 1) + (2 AND 2) + (6 AND 2) + (3 AND 3) + (5 AND 3) = 1 + 0 + 2 + 2 + 3 + 1 = 9.
Example 2:
Input :nums = [1,3,10,4,7,1], numSlots = 9
Output :24
explain : One possible solution is [1, 1] Put it in the basket 1 in ,[3] Put it in the basket 3 in ,[4] Put it in the basket 4 in ,[7] Put it in the basket 7 in ,[10] Put it in the basket 9 in . The maximum sum of and is (1 AND1) + (1 AND 1) + (3 AND 3) + (4 AND 4) + (7 AND 7) + (10 AND 9) = 1 +1 + 3 + 4 + 7 + 8 = 24 . Be careful , Basket 2 ,5 ,6 and 8 It's empty. , This is allowed .
Tips :
n == nums.length
1 <= numSlots <= 9
1 <= n <= 2 * numSlots
1 <=nums[i] <= 15
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/maximum-and-sum-of-array
analysis
We can see numSlots The value is very small. , So we can use binary to represent basket , But this basket is quite special , He can hold two numbers , So we use two bits to represent a basket . Then dynamic planning
Code
class Solution {
public:
int maximumANDSum(vector<int> &nums, int numSlots) {
int ans = 0;
vector<int> f(1 << (numSlots * 2));
for (int i = 0; i < f.size(); ++i) {
int c = __builtin_popcount(i); //i In binary 1 The position of is the position where the number is placed ,c For binary 1 The number of
if (c >= nums.size()) continue;
for (int j = 0; j < numSlots * 2; ++j) {
if ((i & (1 << j)) == 0) {
// Enumerate empty baskets j
int s = i | (1 << j); // s It means that j The situation of putting numbers on the position
f[s] = max(f[s], f[i] + ((j / 2 + 1) & nums[c]));
ans = max(ans, f[s]);
}
}
}
return ans;
}
};
边栏推荐
- Markdown basic grammar
- Why can't the start method be called repeatedly? But the run method can?
- 一文掌握基于深度学习的人脸表情识别开发(基于PaddlePaddle)
- 可知论与熟能生巧
- CADD课程学习(4)-- 获取没有晶体结构的蛋白(SWISS-Model)
- JSON数据传递参数
- 67 page overall planning and construction plan for a new smart city (download attached)
- cocospods 的使用
- Additional: token; (don't read until you finish writing...)
- leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)
猜你喜欢
Interface switching based on pyqt5 toolbar button -1
Program analysis and Optimization - 9 appendix XLA buffer assignment
What is the official website address of e-mail? Explanation of the login entry of the official website address of enterprise e-mail
Ideal car × Oceanbase: when the new forces of car building meet the new forces of database
2022 latest and complete interview questions for software testing
来自数砖大佬的 130页 PPT 深入介绍 Apache Spark 3.2 & 3.3 新功能
C MVC creates a view to get rid of the influence of layout
Fusion de la conversion et de la normalisation des lots
JDBC practice cases
Digital twin smart factory develops digital twin factory solutions
随机推荐
[shutter] shutter open source project reference
Top Devops tool chain inventory
How QT exports data to PDF files (qpdfwriter User Guide)
MATLAB signal processing [Q & a notes-1]
流媒体技术优化
35 pages dangerous chemicals safety management platform solution 2022 Edition
How much do you know about synchronized?
Open source | Wenxin big model Ernie tiny lightweight technology, which is accurate and fast, and the effect is fully open
基于FPGA的VGA协议实现
采用VNC Viewer方式远程连接树莓派
接口差异测试——Diffy工具
How does win11 turn on visual control? Win11 method of turning on visual control
来自数砖大佬的 130页 PPT 深入介绍 Apache Spark 3.2 & 3.3 新功能
Practical series - free commercial video material library
非路由组件之头部组件和底部组件书写
67 page overall planning and construction plan for a new smart city (download attached)
Third party payment function test point [Hangzhou multi tester _ Wang Sir] [Hangzhou multi tester]
@How to use bindsinstance in dagger2
Bean加载控制
RuntimeError: no valid convolution algorithms available in CuDNN