数组中寻找三个数之和等于0java实现

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        //判断参数 
        if(nums.length < 3){
            return result;
        }        
        //首先对数组排序
        Arrays.sort(nums);
        //确定一个数另外两个数字使用双指针的方式来检索
        for(int i = 0;i < nums.length - 2;){
            //另外两个数自行调用双指针函数来解决
            search(nums,i,result);
            //解决完毕之后需要排除重复元素带来的干扰
            int temp = nums[i];
            while(i < nums.length && temp == nums[i]){
                i++;
            }
        }
        return result;
    }

    public void search(int[] nums,int index,List<List<Integer>> result){
        //创建双指针
        int opt1 = index + 1;
        int opt2 = nums.length - 1; 
        //遍历数组元素判断双指针
        while(opt1 < opt2){
            if(nums[opt1] + nums[opt2] < -nums[index]){  
                opt1++;
            }else if(nums[opt1] + nums[opt2] > -nums[index]){
                opt2--;
            }else{
                //添加结果集
                List<Integer> item = new ArrayList<Integer>();
                item.add(nums[index]);
                item.add(nums[opt1]);
                item.add(nums[opt2]);
                result.add(item);
                //排除重复元素带来的影响
                int temp = nums[opt1];
                while(temp == nums[opt1] && opt1 < opt2){
                    opt1++;
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文献综述 计算机科学与技术 基于Java的即时通讯系统设计与实现 随着计算机网络的迅猛发展,人们越来越依赖于网络来解决现实问题,其中即时通讯软 件就是网络技术的一种重要运用,而作为即时通讯的聊天软件,因为其便利快捷的特性,受 到了网民的青睐。 一、即时通讯系统的开发背景 自从上世纪中叶第一台计算机诞生以来,计算机越来越走进人们的生活当中,特别是随 着计算机网络的发展,把全世界的人们紧密的联系在一起,大大的扩展了计算机的功能。 由于互联网的方便快捷的优点,人与人之间的交流也更多的是在网络上进行。在这样的时 代背景下,即时通讯软件也顺势而生[1]。即时通讯(Instant Messenger,简称IM)是一个终端连往一个即时通讯网路的服务。即时通讯,在过去,网民 通常都会将IM等同于一个网络寻找朋友的工具、聊天的工具。但是,随着即时通讯软件功 能和应用的逐渐丰富和完善,IM已经演化成一个综合的桌面通讯平台。目前,无论从娱乐 角度还是从商务角度来看,即时通讯工具在国内外已经成为了一种富有价值的通讯工具, 并且在一些公司的每天业务运作中发挥着重要的作用。桌面即时通讯软件是一个潜力巨 大的支付窗口,它拥有能够把眼球转化成信息流乃至现金流的魔力。目前的即时通讯软件 已经向游戏、音乐、社区,甚至门户等领域的发展,人们已经更乐于用这些即时通讯软件 来交朋结友,发送手机短信,甚至传送文件。 二、即时通讯系统的开发语言 开发基于Socket通信的聊天软件 ,该软件采用了客户端/服务器(C/S)体系结构,由于Java是当下最流行的开发语言,它 一开始就内置了对网络编程的支持,它提供的强大的API,可以使程序员很轻松地开发出强 大的网络应用程序[2]。 网络上的两个程序通过一个双向的通讯连接实现据的交换,这个双向链路的一端称 为一个Socket,Socket是面向客户/服务器模型设计的, Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将 处理此请求,然后通过Socket将结果返回给用户。 Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需 求。使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下, 通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一 对进程之间进行,通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方 式小,但通信链路提供了不可靠的据报服务,不能保证信源所传输的据一定能够到 达信宿,在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信 操作在不同的主机和进程之间转发进行[3]。 Java语言的优点主要表现在:简单、面向对象、多线程、分布性等方面。 (1) 简单性 Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的 功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型 。 Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减 少了出错的可能。 (2) 面向对象 Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法, 很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制 ,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提 供了一种动态的解决方案。 Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本据类 型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建 程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。 Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重 继承,即每个类只能从一个类中继承。 Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面 ,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。 (3) 多线程 多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不 同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样 容易实现网络上的实时交互操作。 Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程 与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保 证了较高的执行效率。 (4) 分布性 Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL 地址在网络上很方便的访问其他对象。 三、即时通讯系统的环境及研究重点 作为即时通讯的一种运用的聊天软件,它继承了即时通讯软件的

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值