Java算法:小红数组移动,对 1 0^ 9 + 7取模

1、题目在这里插入图片描述
2、疑问点
输出描述中对109+7取模,最开始给人整迷糊了。实际上要表达的就是对1000000007取模

3、答案
答案一、

import java.util.Scanner;
import java.math.BigInteger;

public class Main{
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] an = new int[n];
        for (int i = 0; i < n ; i++) {
            an[i] = sc.nextInt();
        }
        String order = sc.next();
        Long v = 0L;
        int len = order.length();
        int pos = 0;
        for (int i = 0; i < len ; i++) {
            String str = order.substring(i, i+1);
            if (str.equals("R")) {
                if (pos + 1 !=  n) {
                    pos+=1;
                }
            }
            if (str.equals("L")) {
                if (pos !=  0) {
                    pos-=1;
                }
            }
            v +=an[pos];
        }
        System.out.println(v%1000000007);
    }
}

答案二、

import java.util.Scanner;
import java.math.BigInteger;

public class Main{
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] an = new int[n];
        for (int i = 0; i < n ; i++) {
            an[i] = sc.nextInt();
        }
        String order = sc.next();
        BigInteger v = new BigInteger("0");
        int len = order.length();
        int pos = 0;
        for (int i = 0; i < len ; i++) {
            String str = order.substring(i, i+1);
            if (str.equals("R")) {
                if (pos + 1 !=  n) {
                    pos+=1;
                }
            }
            if (str.equals("L")) {
                if (pos !=  0) {
                    pos-=1;
                }
            }
            v = v.add(new BigInteger(an[pos]+""));
        }
        System.out.println(v.remainder(new BigInteger("1000000007")));
    }
}

答案三、

import java.util.Scanner;
import java.math.BigInteger;

public class Main{
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] an = new int[n];
        for (int i = 0; i < n ; i++) {
            an[i] = sc.nextInt();
        }
        String order = sc.next();
        Long v = 0L;
        int len = order.length();
        int pos = 0;
        for (int i = 0; i < len ; i++) {
            char str = order.charAt(i);
            if (str == 'R') {
                if (pos + 1 !=  n) {
                    pos+=1;
                }
            }
            if (str == 'L') {
                if (pos !=  0) {
                    pos-=1;
                }
            }
            v +=an[pos];
        }
        System.out.println(v%1000000007);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值