您的位置:首页 > 财经 > 产业 > 广西建设网官网住房和城乡厅官网_计算机专业网站毕业设计_百度2022第三季度财报_四川seo多少钱

广西建设网官网住房和城乡厅官网_计算机专业网站毕业设计_百度2022第三季度财报_四川seo多少钱

2024/12/22 17:48:13 来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/142334469  浏览:    关键词:广西建设网官网住房和城乡厅官网_计算机专业网站毕业设计_百度2022第三季度财报_四川seo多少钱
广西建设网官网住房和城乡厅官网_计算机专业网站毕业设计_百度2022第三季度财报_四川seo多少钱

一.  简介

本文记录一下力扣的逻辑题。主要是数组方面的,使用 C语言实现。

二.  涉及数组的 C语言逻辑题

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

例如:输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

代码实现如下:

int twoSum(int* nums, int numsSize, int target, int* ret_data_index)
{int i = 0, j = 0;for(i = 0; i < (numsSize-1); i++){for(j = i+1; j < numsSize; j++){if((nums[i] + nums[j]) == target){ret_data_index[0] = i;ret_data_index[1] = j;return 0;}}}return -1;
}

2. 寻找两个正序数组的中位数

给定两个大小分别为 mn 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数

算法的时间复杂度应该为 O(log (m+n))

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2


代码实现如下:

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) 
{int i = 0, m = 0, n = 0;int k = nums1Size + nums2Size;int buf[k];int temp = 0;double median_data;int j = 0;memcpy(buf, nums1, nums1Size*sizeof(int));memcpy(&buf[nums1Size], nums2, nums2Size*sizeof(int));//sort from smallest to largestfor(m = 0; m < k; m++){for(n = m+1; n < k; n++){if(buf[m] > buf[n]){temp = buf[m];buf[m] = buf[n];buf[n] = temp;}}}i = k % 2;j = k / 2;if(0 == i){median_data = ((double)buf[j-1] + (double)buf[j])/2;}else {median_data = (double)buf[j];}return median_data;
}

实现思路如下:

首先,将两个数组元素拷贝到一个数组中。

其次,对新拷贝的数组元素进行从小到大排序。

最后,找到中间位置的值。

3.  盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

例如:

代码实现如下:

#define MIN(a,b) ((a < b)? a:b)
#define MAX(a,b) ((a > b)? a:b)int maxArea(int* height, int heightSize) 
{int min_h = 0;int left = 0 ,right = heightSize-1;int area = 0, max_area = 0;while(left < right){min_h = MIN(height[left], height[right]);area = (right - left)* min_h;max_area = MAX(max_area, area);((height[left] < height[right])? left++:right--);}return max_area;
}

实现思路如下:

首先,从数组的头与尾进行统计(即统计最大容器值)。

其次,头与尾的数组元素(即容器的高度值)进行比较,小的一边向数组元素的中间推进。

最后,数组元素轮训一遍,最后得到 最大容器值。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com