当前位置: 首页 > wzjs >正文

陕西省建设厅上海百度推广优化排名

陕西省建设厅,上海百度推广优化排名,企业网站建设的目的论文,中国住房和城乡建设部网站安全目录 一、引言 二、暴力枚举法实现 2.1 代码实现 2.2 代码分析 2.3 时间与空间复杂度 三、排序 双指针法实现 3.1 代码实现 3.2 代码分析 3.3 时间与空间复杂度 四、总结 一、引言 在算法学习和编程面试中,“两数之和”是一个经典的问题。它不仅考察对基本…

目录

 

一、引言

二、暴力枚举法实现

2.1 代码实现

2.2 代码分析

2.3 时间与空间复杂度

三、排序 + 双指针法实现

3.1 代码实现

3.2 代码分析

3.3 时间与空间复杂度

四、总结


 

一、引言

 

在算法学习和编程面试中,“两数之和”是一个经典的问题。它不仅考察对基本数据结构和算法的理解,还能体现程序员解决问题的思路和代码实现能力。给定一个整数数组  nums  和一个整数目标值  target ,要求在数组中找出和为目标值的那两个整数,并返回它们的数组下标,同时规定每种输入只会对应一个答案,且不能使用两次相同的元素。

 

二、暴力枚举法实现

 

2.1 代码实现


 

cint* twoSum(int* nums, int numsSize, int target, int* returnSize) {int *result = (int *)malloc(2 * sizeof(int));*returnSize = 2;for (int i = 0; i < numsSize - 1; i++) {for (int j = i + 1; j < numsSize; j++) {if (nums[i] + nums[j] == target) {result[0] = i;result[1] = j;return result;}}}return NULL;}

2.2 代码分析

 

这段代码采用了暴力枚举的方法。外层循环遍历数组中的每个元素,对于每个元素  nums[i] ,内层循环从  i + 1  开始遍历后续的元素  nums[j] ,检查  nums[i] + nums[j]  是否等于目标值  target 。如果找到符合条件的两个数,就将它们的下标存入动态分配的数组  result  中并返回。如果遍历完整个数组都没有找到,则返回  NULL 。

 

2.3 时间与空间复杂度

 

- 时间复杂度:由于使用了两层嵌套循环,时间复杂度为 O(n^2),其中 n 是数组的长度。

 

- 空间复杂度:只使用了常数级别的额外空间,空间复杂度为 O(1)。

 

三、排序 + 双指针法实现

 

3.1 代码实现


 

ctypedef struct {int val;int index;} NumIndex;// 比较函数,用于qsort排序int cmp(const void *a, const void *b) {NumIndex *num1 = (NumIndex *)a;NumIndex *num2 = (NumIndex *)b;return num1->val - num2->val;}int* twoSum(int* nums, int numsSize, int target, int* returnSize) {// 创建结构体数组,并初始化NumIndex *numIndexArr = (NumIndex *)malloc(numsSize * sizeof(NumIndex));for (int i = 0; i < numsSize; i++) {numIndexArr[i].val = nums[i];numIndexArr[i].index = i;}// 对结构体数组进行排序qsort(numIndexArr, numsSize, sizeof(NumIndex), cmp);int left = 0, right = numsSize - 1;int *result = (int *)malloc(2 * sizeof(int));*returnSize = 2;while (left < right) {int sum = numIndexArr[left].val + numIndexArr[right].val;if (sum == target) {result[0] = numIndexArr[left].index;result[1] = numIndexArr[right].index;free(numIndexArr);numIndexArr=NULL;return result;} else if (sum < target) {left++;} else {right--;}}free(numIndexArr);free(result);numIndexArr=NULL;result=NULL;return NULL;}

3.2 代码分析

 

首先定义了一个结构体  NumIndex ,用于存储数组元素的值和其对应的下标。然后创建一个结构体数组  numIndexArr  并初始化,将原数组的元素值和下标存入其中。接着使用  qsort  函数对结构体数组按照元素值进行排序。

 

排序完成后,使用双指针法,左指针  left  指向数组开头,右指针  right  指向数组末尾。通过计算  numIndexArr[left].val + numIndexArr[right].val  的和与目标值  target  比较:


- 如果和等于目标值,说明找到了符合条件的两个数,将它们在原数组中的下标存入  result  数组并返回,同时释放动态分配的  numIndexArr  内存。

 

- 如果和小于目标值,将左指针  left  右移,增大和的值。

 

- 如果和大于目标值,将右指针  right  左移,减小和的值。

如果遍历完整个数组都没有找到符合条件的数,释放所有动态分配的内存并返回  NULL 。


3.3 时间与空间复杂度

 

- 时间复杂度:排序的时间复杂度为 O(n log n),双指针遍历数组的时间复杂度为 O(n),总体时间复杂度为 O(n log n),比暴力枚举法更优。

 

- 空间复杂度:使用了一个额外的结构体数组来存储元素值和下标,空间复杂度为 O(n)。

 

四、总结

 

本文介绍了两种解决“两数之和”问题的方法。暴力枚举法简单直接,但时间复杂度较高;排序 + 双指针法通过对数组进行预处理和双指针的巧妙运用,降低了时间复杂度,提高了算法效率。在实际应用中,可以根据具体的需求和数据规模选择合适的方法。希望通过这篇博客,读者能对该问题有更深入的理解,并且在遇到类似问题时能够灵活运用这些思路和方法。

 

http://www.dtcms.com/wzjs/449715.html

相关文章:

  • 如何用php做网站管理系统it培训机构有哪些
  • wordpress 顶级分类aso关键词优化工具
  • 湖南省重点建设项目办公室网站中国十大搜索引擎网站
  • 普通企业网站营销西安seo王
  • 深圳都信建设监理有限公司网站广告平台
  • 十堰网站建设电话市场营销四大基本策略
  • 检测网站为什么打不开了哪里做网站便宜
  • 申请一个网页要多少钱长春关键词优化公司
  • 做app和网站怎样网络推广员每天的工作是什么
  • 离开东莞最新政策绍兴seo计费管理
  • 千助网站公司房产网站模板
  • 苏州做网站平台湛江百度网站快速排名
  • 个人网站代码html网站优化服务
  • 微信做引流网站seo标题优化分析范文
  • 深圳专门做写字楼的网站目前常用的搜索引擎有哪些
  • 做移动网站点击软件厦门seo俱乐部
  • 网站开发公司前置审批上海网优化seo公司
  • 新疆建设兵团门户网站智能建站模板
  • wordpress+修改邮箱搜索引擎优化的方法包括
  • 策划书案例范文页面优化的方法有哪些
  • 诚信网站认证必需做吗推广注册app拿佣金平台
  • 上海网站建设广告语沈阳专业seo关键词优化
  • 目前哪个网站建设的最好软文素材网站
  • asp.net做网站有何意义百度宁波运营中心
  • 写网站建设需求文档企业建站都有什么网站
  • 中国建设银行肃宁支行网站百度seo优化软件
  • 台州网站如何制作免费注册网址
  • 优客工场 网站开发window优化大师
  • 网站落地页如何做2023年8月疫情爆发
  • centos。wordpress中国seo谁最厉害