判断有序整型数组中是否存在两数,相加之和等于给定的任意整数

前几天参加C++的一个面试,面试官问到这样一个问题,当时给出的第一答案是1.

  1. 遍历数组中的元素,两数相加与给定的整数进行比较,此种方法在数组个数和整数个数较小时可用。
  2. 两数之和等于任意整数,肯定有一个数小于等于任意整数的1/2,另一个数大于等于任意整数的1/2,那么只需要判断整数的一半,由于数组是排序的,可通过二分查找的方式
  3. 直接遍历数组中小于等于任意整数一半的元素,通过二分查找的方式,在数组中的有序元素不连续时,相比方法2更节省许多运算
时间: 2024-10-16 13:03:48

判断有序整型数组中是否存在两数,相加之和等于给定的任意整数的相关文章

python学习之——元组中两数相加之和等于某数

#题目:数组中找出两个元素之和 等于给定的整数 # 思路: # 1.将数组元素排序: # 2.array[i]与a[j](j的取值:i+1到len_array-1) 相加: # 3.如两两相加<整数继续,如=整数则输出元素值: # 4.如>则直接退出,i+1 开始下一轮相加比较 def addData(array, sumdata): temp_array = array temp_sumdata = sumdata print "sumdata: %d" %temp_su

华为机试—整型数组中出现次数最多的元素

取出整型数组中出现次数最多的元素,并按照升序排列返回. 要求实现方法: public static int[] calcTimes(int[] num, int len); [输入] num:整型数组: len :输入的整数个数 [返回] 按照升序排列返回整型数组中出现次数最多的元素 [注意]只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:num = {1,1,3,4,4,4,9,9,9,10} len = 10 返回:{4,9} #include <iostream>

面试题:一个整型数组中各元素排列组合得到的最大的一个数 ,比如,1,3,9,11,23,233,911 要得到:9,911,3,233,23,11,1

package com.alibaba.interview; import java.util.Random; /** * @Author: weblee * @Email: [email protected] * @Blog: http://www.cnblogs.com/lkzf/ * @Time: 2014年10月25日下午2:58:39 * ************* function description *************** *一个整型数组中各元素排列组合得到的最大的一个

使用一个函数找出一个整型数组中的最大值和最小值

/***************************************************** 知识点:bool类型,命名空间,输入输出 题目要求: 使用一个函数找出一个整型数组中的最大值和最小值 *****************************************************/ #include<stdlib.h> #include<iostream> using namespace std; namespace CJJ // 定义命名空间

求两个有序整型数组的交集

1. 问题描述 有两个有序的整型数组a和b(没有重复元素),他们的长度分别为lenA和lenB,求出他们的共同元素. 例如:a = 0,1,3,5,7,9,11:b = 2,3,4,7,11: 它们的交集为{3,7,11}. 2. 方法思路 求交集的方法有很多种,但数组的长度会影响算法的效率. 2.1 长度相当时,可采取的算法 2.1.1 二路归并 对于数组a,b分别以i,j从头遍历数组.如果当前位置的a[i]等于b[j],则这两个数是两个数组的一个交集,记录下来并继续遍历:如果a[i]大于b[

找出两个整型数组中的公共元素的最大值

一,问题描述 给定两个整型数组,找出这两个数组中的最大的公共元素.注意条件:①公共元素   ②最大的公共元素 比如:arr1={8,2,9,6,18,7,25,28}   arr2={6,39,4,9,25,18,36,12}.假设 arr1 的长度为M,arr2的长度为N 这两个数组的最大公共元素是:25 二,思路 ①对 arr1 中的每个元素arr1[i],去 arr2 查找是否也存在 该元素,若存在则标记起来,因为它虽然是公共的,但不一定是最大的. 直到扫描完arr1中的所有元素,这种方式

LeetCode Remove Duplicates from Sorted Array删除整型数组中的重复元素并返回剩下元素个数

1 class Solution { 2 public: 3 int removeDuplicates(int A[], int n) { 4 int *s=&A[0],*e=&A[0]; //s指向开头第一个,e往后遍历相同的 5 int t,i,j=n; 6 for(i=1;i<n;i++){ 7 e++; 8 if(*s==*e) 9 j--; 10 else{ 11 s++; 12 *s=*e; 13 } 14 } 15 return j; 16 } 17 }; 题意:给一个

返回一个整型数组中最大子数组的和

组员:刘伟 http://www.cnblogs.com/Lw-1573/p/5323542.html 1.题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 2.设计思想: 本题目最大的难点是如何找出子数组并且时间复杂度为O(n):我的思路是:从总左边(a[0])开始遍历整个数组,一直到最右边结束(a[n-1]),在这个过程中记录到目前

返回一个整型数组中最大子数组的和(02)

组员:刘伟 http://www.cnblogs.com/Lw-1573/p/5323542.html 1.要求: 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大.同时返回最大子数组的位置.求所有子数组的和的最大值. 2分析: 这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,