zoukankan      html  css  js  c++  java
  • 人人网2014年笔试题【两个数之和等于第三个数】

    雪影工作室版权所有,转载请注明【http://blog.csdn.net/lina791211】


    一、灵感来源

    2013-09-17 | 题目来源 http://blog.csdn.net/dlutbrucezhang/article/details/11737269

    二、题目

             人人网2014年笔试题: 给出一个有序数组,另外给出第三个数,问是否能在数组中找到两个数,这两个数之和等于第三个数。

    三、Java实现

              本算法实现参考原博客的算法实现,左右共同开始,使用“碰撞”的方式进行匹配,只需遍历一次数组即可算出结果。(数组int[] array,头pH,尾pT)

     


    引用原文的流程:

     

    我们首先看到第一句话,这个数组是有序的,所以,我们可以定义两个指针,一个指向数组的第一个元素,另一个指向应该指向的位置(这个需要看具体的实现和数组给定的值),首先计算两个位置的和是否等于给定的第三个数,如果等于则算法结束,如果大于,则尾指针向头指针方向移动,如果小于,则头指针向尾指针方向移动,当头指针大于等于尾指针时算法结束,没有找到这样的两个数。



            原博文使用C语言实现了此算法,本人的C语言在这一年全还给了C语言老师,实现起来颇为慢,故而转到Java实现。

            源码奉上,另外感谢原博主提供的人人网校招笔试题。

    package com.RenRen;
    
    /**
     * @题目 给出一个有序数组,另外给出第三个数,问是否能在数组中找到两个数,这两个数之和等于第三个数。
     * @author 雪影工作室
     *
     */
    public class T201401 {
    	public static void main(String[] args) {
    		int[] array = {1,2,3,4,6,9,11,12,23,45};
    		int total = 19;
    		int pH=0;
    		int pT=array.length-1;
    		Boolean flag = false;
    		while(pH<pT){
    			int temp = array[pH] + array[pT];
    			if(temp<total) {
    				pH++;
    				continue;
    			}
    			if(temp>total){
    				pT--;
    				continue;
    			}
    			if(temp==total) {
    				flag = true;
    				break;
    			}
    		}
    		if(flag){
    			System.out.println(array[pH] + "+" + array[pT] + "=" + total);
    		}else{
    			System.out.println("未找到");
    		}
    	}
    }
    

    四、备用

     

             慢慢尝试使用其它方法实现。如果有什么好的方法,欢迎大家共同探讨


  • 相关阅读:
    JavaScript设计模式(策略模式)
    JavaScript设计模式(单例模式)
    react中数据持久化缓存redux-persist
    webpack编写一个plugin插件
    webpack自定义loader并发布
    Vue用递归实现一个消除输入框表情符的自定义directive
    Spring MVC表单防重复提交
    @Controller,@Service,@Repository,@Component详解
    Spring Enable*高级应用及原理
    Spring Aware容器感知技术
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3331158.html
Copyright © 2011-2022 走看看