关于函数的一道题

7. 下面的函数有没有错误?如果有错在哪里?

 int find_max (intarray[10])

{

    int i;

    int max=array[0];

    for(i=0;i<10;i+=1)

        if(array [i]>max)

           max=array [i];

    return max;

}


首先要说的是函数的参数是一个数组,声明数组的大小并没有任何作用,编译器并不检查形参数组的大小,因为编译器编译时把形参数组名处理为一个指针变量,用来接收一个地址,只是将实参数组首元素的地址传给形参素组名,因此形参数组名获得了实参数组的首地址,,
其次,,对于上面的函数,在传参时容易产生数组越界问题,,假定当他被调用时传递给他的正好是十个元素的的数组,,若果参数数组更大一些,他就会忽略剩余的元素

如果传递一个不足十个元素的数组,函数将访问数组边界之外的值,造成越界

优化以后就这样,传了一个长度进去


### Python 中等难度函数编程设计 以下是为用户设计的一道中等难度的 Python 函数相关编程目: #### 目描述 给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值的两个整数,并返回它们的索引。你可以假设每种输入只会对应一种答案,且不可以重复利用同一个元素。 **注意**: 返回的结果应是一个元组 `(i, j)`,其中 `i < j` 并且满足条件 `nums[i] + nums[j] == target`。 **示例**: ```python Input: nums = [2, 7, 11, 15], target = 9 Output: (0, 1) Explanation: Because nums[0] + nums[1] == 9, we return (0, 1). ``` **提示**: - 数组长度范围 `[2, 10^4]` - 整数值范围 `[-10^9, 10^9]` - 目标值范围 `[-10^9, 10^9]` --- #### 参考解答 以下提供了一种基于哈希表的方法实现此功能,时间复杂度为 O(n),空间复杂度也为 O(n)[^1]: ```python def two_sum(nums, target): num_to_index = {} # 创建一个字典用于存储已访问过的数字及其对应的索引 for index, value in enumerate(nums): # 遍历整个数组 complement = target - value # 计算当前值所需的补数 if complement in num_to_index: # 如果补数存在于字典中,则找到了一对匹配项 return (num_to_index[complement], index) # 返回这两个数的索引作为结果 num_to_index[value] = index # 否则将当前值存入字典以便后续查找 return None # 若未找到符合条件的组合,则返回None ``` 测试代码如下所示: ```python if __name__ == "__main__": test_nums = [2, 7, 11, 15] test_target = 9 result = two_sum(test_nums, test_target) print(f"Result: {result}") # 输出 Result: (0, 1) ``` [^1] --- #### 思路解析 本的核心在于通过减少不必要的计算次数来提高效率。传统的暴力法需要双重循环才能完成配对操作,其时间复杂度高达O(n²)。然而采用哈希表记录已经遍历过的信息后,在单次扫描过程中即可判断是否存在合适的另一部分数据使得两者之和等于指定的目标值。 此外还可以考虑其他变体形式扩展练习价值,比如支持多个可能解的情况或者处理浮点型参数等等[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值