博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode — two-sum-ii-input-array-is-sorted
阅读量:6083 次
发布时间:2019-06-20

本文共 2767 字,大约阅读时间需要 9 分钟。

import java.util.Arrays;/** * Source : https://oj.leetcode.com/problems/two-sum-ii-input-array-is-sorted/ * * Created by lverpeng on 2017/6/22. * * Given an array of integers that is already sorted in ascending order, * find two numbers such that they add up to a specific target number. * * The function twoSum should return indices of the two numbers such that they add up to the target, * where index1 must be less than index2. Please note that your returned answers (both index1 and index2) * are not zero-based. * * You may assume that each input would have exactly one solution. * * Input: numbers={2, 7, 11, 15}, target=9 * Output: index1=1, index2=2 * */public class TwoSum2 {    public static void main(String[] args) {        TwoSum2 twoSum2 = new TwoSum2();        int[] numbers = {15, 7, 2, 11};        twoSum2.quicksort(numbers, 0, 3);        System.out.println(Arrays.toString(numbers));        System.out.println(Arrays.toString(twoSum2.twoSum(numbers, 9)));    }    /**     * 相比于一,这个问题里面的输入数组是有序的,可以使用两个指针来分别指向数组的首尾,     * 根据当前指针指向的两个数的和与target的比较来决定那一个指针移动     * 时间复杂度:O(n),因为这里已经排好序了,如果还要排序的话,排序最佳时间复杂度是O(nlogn),quicksort     * 空间复杂度:O(1)     *     * @param numbers     * @param target     */    public int[] twoSum (int[] numbers, int target) {        int[] result = new int[2];        int low = 0;        int high = numbers.length - 1;        while (low < high) {            if ((numbers[low] + numbers[high]) == target) {                result[0] = low + 1;                result[1] = high + 1;                break;            } else if ((numbers[low] + numbers[high]) > target) {                high--;            } else {                low++;            }        }        return result;    }    /**     * 快速排序     * 时间复杂度:平均O(nlogn),最坏O(n^2)     * 基本思路:     * 1. 取出一个基准,通常取最后一个元素     * 2. 定义首尾两个指针,根据基准将数组分成,左边是小于基准,右边大于基准     * 3. 递归的对左边和右边,执行步骤1、2     *     * @param nums     * @param start     * @param end     */    public void quicksort (int[] nums, int start, int end) {        if (start >= end) {            return ;        }        int left = start;        int right = end;        int mid = nums[end];        while (left < right) {            while (nums[left] <= mid && left < right) {                left++;            }            while (nums[right] >= mid && left < right) {                right--;            }            swap(nums, left, right);        }        if (nums[left] >= mid) {            swap(nums, left, end);        } else {            left++;        }        quicksort(nums, start, left - 1);        quicksort(nums, left, end);    }    public void swap (int[] arr, int x, int y) {        int temp = arr[x];        arr[x]  =arr[y];        arr[y] = temp;    }}

转载于:https://www.cnblogs.com/sunshine-2015/p/7226555.html

你可能感兴趣的文章
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>
想说一点东西。。。。
查看>>
css知多少(8)——float上篇
查看>>