java利用try...catch语句连续输入

给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:

子数组大小 至少为 2 ,且
子数组元素总和为 k 的倍数。
如果存在,返回 true ;否则,返回 false 。

如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。0 始终视为 k 的一个倍数。

示例 1:

输入:nums = [23,2,4,6,7], k = 6
输出:true
解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/continuous-subarray-sum

java利用try...catch语句连续输入
package JavaPackageOne;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

class Solution {
    public static boolean checkSubArraySum(int[] nums, int k) {
        int m = nums.length;
        if (m < 2) {
            return false;
        }
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, -1);
        int remainder = 0;
        for (int i = 0; i < m; i++) {
            remainder = (remainder + nums[i]) % k;
            if (map.containsKey(remainder)) {
                int prevIndex = map.get(remainder);
                if (i - prevIndex >= 2) {
                    return true;
                }
            } else {
                map.put(remainder, i);
            }
        }
        return false;
    }

    public static int[] stringToInt(String[] arr) {
        int[] ints = new int[arr.length];
        for (int i=0; i<arr.length; i++) {
            ints[i] = Integer.parseInt(arr[i]);
        }
        return ints;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = br.readLine()) != null) {
            try {
                // nums
                String[] arr = str.split(", ");
                String[] arr1 = arr[0].split(" = ");
                String[] numsArray =
                        arr1[1].replace("[", "").replace("]", "").split(",");
                String[] arr2 = arr[1].split(" = ");
                int k = Integer.parseInt(arr2[1]);

                int[] nums = stringToInt(numsArray);
                System.out.println(checkSubArraySum(nums, k));
            } catch (Exception e) {
                // e.printStackTrace();
                // 回车一行就退出
                break;
            }
        }
    }
}
View Code

输入:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = br.readLine()) != null) { // 执行的代码块 }

## String[]数组转int[]数组:

public static int[] stringToInt(String[] arr) {
        int[] ints = new int[arr.length];
        for (int i=0; i<arr.length; i++) {
            ints[i] = Integer.parseInt(arr[i]);
        }
        return ints;
}

 

上一篇:jdbc 占位符插入null值 NullPointerException


下一篇:Linux重启和关机命令