您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用双指针可能只需要遍历一趟哦(洛谷P1147题题解,Java语言描述)

星拱北辰 发布时间:2020-01-27 13:10:14 ,浏览量:0

题目要求

P1147题目链接

在这里插入图片描述

分析

Java没有指针的概念,但我们也不是用的C的指针。这里的指针是指两个数值,代表区间的两个索引,利用双指针的移动表示区间的收缩或者扩张,借此找到所求的解。 我们定义两个int变量 i 和 j 来代表一个区间左右边界的索引 tempSum是指当前区间内所有数值的和。 当tempSum小于目标值M时,将右端点右移(j++),然后改变tempSum的值,即tempSum会变大; 当tempSum大于目标值M时,将左端点右移(i++),然后改变tempSum的值,即tempSum会变小。 在双指针移动的过程中,如果有tempSum==M的情况就将其添加到List里面,等最后输出。 因为两个指针整体是向右移动,也只扫一遍,效率比较高。 左端点大于m/2时就停止,因为只要长度为2的连续序列和就一定大于m,肯定不符合要求,不必浪费时间。 具体的设计还是需要仔细看的:

AC代码(Java语言描述)
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        scanner.close();
        int tempSum = 3;
        List list = new LinkedList();
        for(int i = 1, j = 2; i             
关注
打赏
1660750074
查看更多评论
0.0448s