另一种检查数组中是否有两元素之和等于给定数

2024-04-06 21:38

本文主要是介绍另一种检查数组中是否有两元素之和等于给定数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个数其和刚好为x#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>int merge(int * objary,unsigned int index_start,unsigned int index_middle,unsigned int index_end)
{int n1 = index_middle - index_start + 1;int n2 = index_end - index_middle;int * leftary = (int *)malloc(n1 * sizeof(int));int * rightary = (int *)malloc(n2 * sizeof(int));int i,j,k = index_start;for(i = 0;i < n1; ++i){leftary[i] = objary[k];k ++;}for(j = 0;j < n2; ++j){rightary[j] = objary[k];k ++;}i = 0;j = 0;for(k = index_start; k <= index_end; ++ k){if(leftary[i] <= rightary[j]){objary[k] = leftary[i];++ i;if(i == n1)break;}else{objary[k] = rightary[j];++ j;if(j == n2)break;}}++ k;if(i == n1){for(; j < n2; ++ j){objary[k] = rightary[j];++ k;}}else if(j == n2){for(; i < n1; ++ i){objary[k] = leftary[i];++ k;}}free(leftary);free(rightary);leftary = NULL;rightary = NULL;
}
void merge_sort(int * objary,unsigned int index_start,unsigned int index_end)
{unsigned int index_middle;if(index_start < index_end){index_middle = (index_start + index_end) / 2;merge_sort(objary,index_start,index_middle);merge_sort(objary,index_middle + 1,index_end);merge(objary,index_start,index_middle,index_end);}
}
bool is_number_in_array(int array[],int number,int length){int start = 0;int end = length - 1;int half = (start + end) / 2;while(end > start){if(number > array[half]){printf("start:%d,half:%d,end:%d\n",start,half,end);printf("%d,%d\n",array[half],number);start = half ;half = (start + end) / 2;}else if(number < array[half]){printf("start:%d,half:%d,end:%d\n",start,half,end);printf("%d,%d\n",array[half],number);end = half ;half = (start + end) / 2;}else{return true;}}return false;
}bool IS_num_sum_of_two_elements(int array[],int sum,int length){merge_sort(array,0,length - 1);for(int i = 0; i < length; i ++){int j = length - 1;int sum_value = array[i] + array[j];if(sum < sum_value){j -= 1;}else if(sum > sum_value){i += 1;}elsereturn true;}return false;
}int main() {int array[] = {3,41,52,26,38,57,9,49};int length = sizeof(array)/ sizeof(array[0]);if(IS_num_sum_of_two_elements(array,200,length - 1))printf("true\n");elseprintf("false\n");return 0;
}

 

这篇关于另一种检查数组中是否有两元素之和等于给定数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880888

相关文章

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被