題目描述
題目名稱:數值同化
題目背景: 在一個數值同化過程中,你需要將一組數值進行特定的處理,使得它們能夠“同化”到一個目標值附近。具體做法是,給定一個數組 nums 和一個目標值 target,你需要對數組中的每個元素進行操作,使得數組中的所有元素都盡可能接近 target。
輸入:
- nums:一個包含整數的數組,表示需要進行同化的數值。
- target:一個整數,表示同化目標值。
輸出:
- 返回同化后的數組,數組中的每個元素都是經過處理后盡可能接近 target 的值。同化規則如下:
- 如果 nums[i] < target,則同化后的值為 nums[i] + diff,其中 diff 是 target 與 nums[i] 的差值的一半(向上取整)。
- 如果 nums[i] >= target,則同化后的值為 nums[i] 減去 diff,其中 diff 是 target 與 nums[i] 差值的一半(向下取整)。
示例:
輸入:nums = [1, 3, 5, 7], target = 4
輸出:[3, 4, 4, 5]
解釋:
1 < 4,同化后為 1 + (4 - 1) // 2 + 1 = 3
3 < 4,同化后為 3 + (4 - 3) // 2 + 0 = 4
5 >= 4,同化后為 5 - (5 - 4) // 2 = 4
7 >= 4,同化后為 7 - (7 - 4) // 2 = 5
思路
- 遍歷數組:我們需要遍歷數組中的每個元素。
- 計算差值:對于每個元素,計算它與目標值的差值。
- 同化規則:
- 如果當前元素小于目標值,則增加差值的一半(向上取整)。
- 如果當前元素大于等于目標值,則減少差值的一半(向下取整)。
- 存儲結果:將同化后的值存儲在新的數組中,并返回該數組。
Java 代碼解析
import java.util.Arrays;
public class NumericalAssimilation {
????public static int[] assimilate(int[] nums, int target) {
????????int[] result = new int[nums.length];
????????for (int i = 0; i < nums.length; i++) {
????????????int diff = Math.abs(nums[i] - target);
????????????if (nums[i] < target) {
????????????????result[i] = nums[i] + (diff + 1) / 2; // 向上取整
????????????} else {
????????????????result[i] = nums[i] - diff / 2; // 向下取整
????????????}
????????}
????????return result;
????}
????public static void main(String[] args) {
????????int[] nums = {1, 3, 5, 7};
????????int target = 4;
????????int[] assimilated = assimilate(nums, target);
????????System.out.println(Arrays.toString(assimilated)); // 輸出:[3, 4, 4, 5]
????}
}
C++ 代碼解析
#include <iostream>
#include <vector>
#include <cmath>
std::vector<int> assimilate(const std::vector<int>& nums, int target) {
????std::vector<int> result(nums.size());
????for (size_t i = 0; i < nums.size(); ++i) {
????????int diff = std::abs(nums[i] - target);
????????if (nums[i] < target) {
????????????result[i] = nums[i] + (diff + 1) / 2; // 向上取整
????????} else {
????????????result[i] = nums[i] - diff / 2; // 向下取整
????????}
????}
????return result;
}
int main() {
????std::vector<int> nums = {1, 3, 5, 7};
????int target = 4;
????std::vector<int> assimilated = assimilate(nums, target);
????for (int num : assimilated) {
????????std::cout << num << " ";
????}
????// 輸出:3 4 4 5
????return 0;
}
Python 代碼解析
def assimilate(nums, target):
????result = []
????for num in nums:
????????diff = abs(num - target)
????????if num < target:
????????????result.append(num + (diff + 1) // 2) ?# 向上取整
????????else:
????????????result.append(num - diff // 2) ?# 向下取整
????return result
nums = [1, 3, 5, 7]
target = 4
assimilated = assimilate(nums, target)
print(assimilated) ?# 輸出:[3, 4, 4, 5]