题目描述:
给你一个整数数组 nums
,一个整数 k
和一个整数 multiplier
。
你需要对 nums
执行 k
次操作,每次操作中:
- 找到
nums
中的 最小 值x
,如果存在多个最小值,选择最 前面 的一个。 - 将
x
替换为x * multiplier
。
请你返回执行完 k
次乘运算之后,最终的 nums
数组。
代码思路:
这个代码的目的是对输入数组 nums
进行操作,每次找出数组中的最小值,并将这个最小值乘以一个给定的 multiplier
(乘数),重复这个过程 k
次。最终,函数需要返回经过 k
次操作后的数组。同时,函数通过 returnSize
参数返回数组的大小。
以下是代码的思路分析:
- 初始化变量:
min
用于存储当前遍历到的最小值。index
用于记录当前最小值的索引。- 外层循环变量
i
从0
到k-1
,表示需要进行k
次操作。
- 寻找最小值并更新:
- 内层循环遍历
nums
数组,从0
到numsSize-1
。 - 在每次内层循环中,比较当前元素
nums[j]
和min
。 - 如果
nums[j]
小于min
,则更新min
为nums[j]
,并更新index
为当前索引j
。
- 内层循环遍历
- 更新最小值:
- 完成内层循环后,找到了当前数组中的最小值及其索引
index
。 - 将
nums[index]
乘以multiplier
,即nums[index] = nums[index] * multiplier
。
- 完成内层循环后,找到了当前数组中的最小值及其索引
- 重复操作:
- 回到外层循环,重复上述步骤
k
次。
- 回到外层循环,重复上述步骤
- 返回结果:
- 将
numsSize
赋值给*returnSize
,表示返回数组的大小。 - 返回
nums
数组。注意这里的实现直接返回了原数组nums
的指针,而不是通过malloc
分配的新数组。根据函数注释,假设调用者会负责调用free()
来释放内存,但在这个实现中,实际上并没有分配新内存,因此调用者不需要(也不应该)对返回的指针调用free()
。
- 将
代码实现:
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* getFinalState(int* nums, int numsSize, int k, int multiplier, int* returnSize) {for(int i=0;i<k;i++){int min=nums[0];int index=0;for(int j=0;j<numsSize;j++){if(min>nums[j]){index=j;min=nums[j];}}nums[index]=nums[index]*multiplier;}* returnSize=numsSize;return nums;
}