暑假培训

1.消失的数字 C

函数接受一个整数数组`nums`和数组的大小`numsSize`作为参数,并返回缺失的数字。

代码分析如下:

1. 创建一个整数变量`sum`并初始化为0,用于计算所有数字的总和。

2. 第一个`for`循环从0遍历到`numsSize+1`,即遍历数组中的所有数字和可能缺失的数字。

- 在循环中,使用累加操作`sum+=i`将当前循环变量`i`的值加到总和`sum`上。

- 这个循环的目的是计算从0到`numsSize`所有数字的总和。

3. 第二个`for`循环从0遍历到`numsSize`,即遍历给定的整数数组`nums`。

- 在循环中,使用累减操作`sum-=nums[i]`将数组中的每个数字从总和`sum`中减去。

- 这个循环的目的是将数组中的所有数字从总和中排除,得到缺失的数字。

4. 最后,返回最终的总和`sum`,它是原始数组中缺失的数字。

 

2.移除元素 python

这函数接受一个整数数组`nums`和一个目标值`val`作为参数,将数组中所有等于目标值的元素移除,并返回新的数组长度。

代码分析如下:

1. 定义一个类`Solution`,其中包含一个名为`removeElement`的方法。

2. `removeElement`方法接受三个参数,`self`表示实例本身,`nums`表示要操作的整数数组,`val`表示要移除的目标值。

3. 使用`while val in nums`的循环条件判断目标值是否存在于数组中。

4. 循环内,使用`nums.remove(val)`将数组中所有等于目标值的元素移除。

5. 循环结束后,使用`return len(nums)`返回移除元素后的新数组的长度。

这段代码通过循环遍历数组并调用`remove()`方法来移除数组中的目标值,最终返回新数组的长度。

 

3.合并两个有序数组 C

函数接受两个整数数组`nums1`和`nums2`,以及它们各自的大小`nums1Size`和`nums2Size`作为参数,同时还接受两个整数`m`和`n`,分别表示在数组`nums1`和`nums2`中有效元素的数量。

代码分析如下:

1. 使用`malloc()`函数动态分配了一个临时数组`tmp`,用来存储合并后的结果,分配的空间大小为`(m+n)`个整数。

2. 声明并初始化三个整数变量`i1`、`i2`和`i`,分别表示数组`nums1`、`nums2`和`tmp`的当前索引位置。

3. 使用`while`循环进行合并操作,循环条件是`i1 < m`和`i2 < n`,表示只要两个数组中还存在有效元素,就继续合并。

4. 在循环中,通过比较`nums1[i1]`和`nums2[i2]`的值,将较小的值存入临时数组`tmp`中,并递增相应的索引。

5. 当其中一个数组遍历完后,剩下的元素可以直接复制到临时数组`tmp`中。

6. 使用`memcpy()`函数将临时数组`tmp`中的元素复制回原数组`nums1`中,将合并后的结果存回原数组。

7. 使用`free()`函数释放之前动态分配的临时数组`tmp`的内存空间,并将指针`tmp`置为`NULL`。

4.多数元素 python

函数接受一个整数列表`nums`作为参数,并返回一个整数,表示数组中出现次数超过一半的元素。

代码分析如下:

1. 定义一个类`Solution`,其中包含一个名为`majorityElement`的方法。

2. `majorityElement`方法接受一个参数`nums`,这个参数是一个整数列表。

3. 创建一个空字典`result`,用于记录每个元素在列表中出现的次数。

4. 使用`len(nums)`将列表`nums`的长度赋值给变量`size`,用于后续的判断。

5. 如果列表的长度`size`为1,说明列表中只有一个元素,直接返回这个元素即可。

6. 遍历列表`nums`,对于每个元素`i`,判断是否已经存在于字典`result`中。

- 如果不存在,将元素`i`作为键,初始出现次数设置为1,并将键值对添加到字典`result`中。
- 如果已经存在,将对应键的值加1。

- 同时判断键对应的值是否大于`len(nums)/2`,如果是,则说明该元素是多数元素,直接返回该元素。

7. 如果函数未在遍历过程中返回多数元素,则返回None。

这段代码的作用是找出列表中出现次数超过一半的元素,如果存在,则返回该元素,否则返回None。

需要注意的是,示例代码中使用了Python的语法规范,其中`List[int]`表示参数类型为整数列表,`-> int`表示返回值的类型为整数。

5.盛最多水的容器 

函数接受一个整数数组`height`和数组的大小`heightSize`作为参数,并返回容器能够存储的最大水量。

代码分析如下:

1. 当数组的大小`heightSize`为0或1时,直接返回0,因为无法形成容器。

2. 初始化两个指针`left`和`right`分别指向数组的最左边和最右边。

3. 初始化变量`min`为`height[left]`和`height[right]`中较小的元素的索引。

4. 计算初始的存储水量,即`area = height[min] * (right - left)`。

5. 进入循环,只要`left < right`,继续进行以下操作:

- 如果`min <= left`,表示较小的元素在`left`的左侧,将`left`指针向右移动一位。
- 如果`min >= right`,表示较小的元素在`right`的右侧,将`right`指针向左移动一位。
- 更新`min`为`height[left]`和`height[right]`中较小的元素的索引。
- 如果新的存储水量`height[min] * (right - left)`大于之前的最大水量`area`,则更新`area`。

6. 循环结束后,返回最大的存储水量`area`。

这段代码的目的是通过双指针的方法来计算容器的最大存储水量。双指针从数组的两端开始,不断向中间移动,并计算当前状态下的存储水量,更新最大水量的值。最终返回最大水量。

6.搜索插入元素

 

 

 

 

posted @ 2023-07-28 12:10  yinwar123  阅读(13)  评论(0编辑  收藏  举报
1 2 3
4