网上看到这个面试题,自己琢磨了下,写了几个比较简单的解决方法,请各位大虾给出自己的理解,最好能给出更为简单的解决办法
package com.liuc.test;
//一个排好序的数组,找出两数之和为M的所有组合 这里设置M为100,可以将100替换为想要让求的和
public class SumM {
public static int[] arr = { 1, 3, 5, 7, 9, 14, 23, 70, 80, 93, 95, 100,200, 300 };
public static int count1 = 0;
public static int count2 = 0;
public static int count3 = 0;
public static void main(String[] args) {
// 1、纯for循环
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
count1++;
if (arr[i] + arr[j] == 100) {
System.out.println(arr[i] + ":" + arr[j]);
}
}
}
//卡住一个端,左端只有小于M/2才会判断
for (int i = 0; i < arr.length; i++) {
if (arr[i] <= 100 / 2) {
for (int j = i + 1; j < arr.length; j++) {
count2++;
if (arr[i] + arr[j] == 100) {
System.out.println(arr[i] + ":" + arr[j]);
}
}
}
}
//卡住一个端,左端只有小于M/2,右端大于M/2才会判断
for (int i = 0; i < arr.length; i++) {
if (arr[i] <= 100 / 2) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] >= 100 / 2) {
count3++;
if (arr[i] + arr[j] == 100) {
System.out.println(arr[i] + ":" + arr[j]);
}
}
}
}
}
System.out.println("count1=" + count1);
System.out.println("count2=" + count2);
System.out.println("count3=" + count3);
}
}
结果:
5:95
7:93
5:95
7:93
5:95
7:93
count1=91
count2=70
count3=49
分享到:
相关推荐
有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。在此举个6个数的例子。
有一个已排好序的数组,今输入一个数,要求按排序的规律将它插入数组中。
给定一个数组,找出其中3个相加等于0的组合
# 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 # 分析: # 首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
已经两个已经排好序的数组,找出两个数组合起来的中间大的数字
(1)设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数,设计一个算法复杂度为O(logn)的分治算法,找出X和Y中2n个数中的中位数。(中位数:个数为奇数:中间位置上的数;个数为偶数,中间两个数的...
对两个已经排好序的数组,进行合并,实现的是从文本中读取数据,执行前需要建立txt文件
基础小白
指针 ~~编写一个函数,将数组中n个数按反序存放。 实验步骤与要求: 在主函数中输入10个数,并输出排好序的数。 编写函数invert()将10个数按反序存放。
找出两数组相同的数(VB6.0源代码编写)比较并找出两数组相同的数,显示出相同的数值显示两个数组中相同数的位置等.
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
我们使用Python的random模块生成了两个随机数组,分别是1到36中随机选取的5个数和1到12中随机选取的2个数。然后,我们使用加号运算符将这两个数组组合成一个新的数组,并输出结果。 需要注意的是,我们使用了random...
用C语言编写两个数组合并成一个数组,并有序排列 。数组合并。
需要将两个数组合并成为一个的情况。比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a、b,需求是将两个数组合并成一个。方法如下: 1、concat js的Array对象提供了一个叫concat()方法,连接两个或更多的...
设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。
网上那种找出两个数组重复元素的代码复杂度较高,这个比较简单,一次循环搞定
设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] ...
有一个数组,有一个数x,是否存在数组中两个数之和等于x 两种方法实现,时耗对比 方法1: 先sort, head位置=0, tail位置=x的位置 如果 array[head]+ array[tail] > x; tail--; else head++; 方法2: 暴力破解,两...