题目描述:
给你一个整数数组 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;
}
