使用给定的减法运算最小化移动以使 X 和 Y 相等
给定两个正整数X和Y ,任务是找到使 X 和 y 相等的最小操作数,其中在一次操作中,我们可以选择任何正整数Z并执行以下过程。
- 如果数字Z 是偶数,则从 X 中减去 Z。
- 如果数字Z 是奇数,则将 Z 添加到 X 。
例子:
Input: X = 4, Y = 7
Output: 1
Explanation: Select Z = 3, then the new X will be 4 + 3 = 7.
Hence, it requires only one operation.
Input: X = 6, Y = 6
Output: 0
Explanation: Both of them are already the same.
Hence, it requires 0 operations.
方法:这个问题可以用 基于以下观察的贪心方法:
There are only three possible answers:
- First, if X = Y, no operation is required,
- Second, If X > Y and X − Y is even or X < Y and Y − X is odd, then only 1 operation is required.
- Third, if X > Y and X − Y is odd or X < Y and Y − X is even, then there is need for 2 operations. One move extra is required for turning it to the second case
请按照以下步骤解决此问题:
- 找出X和Y之间的关系。
- 现在根据上述观察,根据关系找出需要多少移动。
以下是上述方法的实现:
C++
// C++ code to implement the above approach
#include
using namespace std;
// Function to find the minimum number
// of moves required
int minMoves(int X, int Y)
{
// Checking if both 'X' and 'Y'
// are same or not.
if (X == Y) {
return 0;
}
// Checking if we can make X and Y equal
// if we select Z = X - Y
else if (X > Y && (X - Y) % 2 == 0) {
return 1;
}
// Checking if we can make X and Y equal
// if we select Z = Y - X
else if (X < Y && (Y - X) % 2 == 1) {
return 1;
}
else {
return 2;
}
}
// Driver Code
int main()
{
int X = 4, Y = 7;
// Function call
cout << minMoves(X, Y);
return 0;
}
输出
1
时间复杂度: O(1)
辅助空间: O(1)