首页 > 其他分享 >1630 等差子数组

1630 等差子数组

时间:2023-03-23 23:02:16浏览次数:54  
标签:1630 false nums int length 数组 差子 等差数列

1630. 等差子数组

如果一个数列由至少两个元素组成,且每两个连续元素之间的差值都相同,那么这个序列就是 等差数列 。更正式地,数列 s 是等差数列,只需要满足:对于每个有效的 is[i+1] - s[i] == s[1] - s[0] 都成立。

例如,下面这些都是 等差数列

1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9

下面的数列 不是等差数列

1, 1, 2, 5, 7

给你一个由 n 个整数组成的数组 nums,和两个由 m 个整数组成的数组 lr,后两个数组表示 m 组范围查询,其中第 i 个查询对应范围 [l[i], r[i]] 。所有数组的下标都是 从 0 开始 的。

返回boolean 元素构成的答案列表 answer 。如果子数组 nums[l[i]], nums[l[i]+1], ... , nums[r[i]] 可以 重新排列 形成 等差数列answer[i] 的值就是 true;否则answer[i] 的值就是 false

示例 1:

输入:nums = [4,6,5,9,3,7], l = [0,0,2], r = [2,3,5]
输出:[true,false,true]
解释:
第 0 个查询,对应子数组 [4,6,5] 。可以重新排列为等差数列 [6,5,4] 。
第 1 个查询,对应子数组 [4,6,5,9] 。无法重新排列形成等差数列。
第 2 个查询,对应子数组 [5,9,3,7] 。可以重新排列为等差数列 [3,5,7,9] 。

示例 2:

输入:nums = [-12,-9,-3,-12,-6,15,20,-25,-20,-15,-10], l = [0,1,6,4,8,7], r = [4,4,9,7,9,10]
输出:[false,true,false,false,true,true]

提示:

  • n == nums.length
  • m == l.length
  • m == r.length
  • 2 <= n <= 500
  • 1 <= m <= 500
  • 0 <= l[i] < r[i] < n
  • -105 <= nums[i] <= 105

解题思路:先将每组数据读出来,然后对其排序,确定第一个数据和第二个数据的差值,然后对数组中的前后数字进行比较,若不等于之前计算出的差值,判false,继续下一轮;

class Solution {
    public List<Boolean> checkArithmeticSubarrays(int[] nums, int[] l, int[] r) {
        Boolean[] res = new Boolean[l.length];
        for (int i = 0; i < l.length;i++) {
            res[i] = false;
        }
        outer:
        for (int i = 0; i < l.length;i++) {
            int left = l[i], right = r[i];
            int length = right - left+1;
            int[] arr = new int[length];
            int index = 0;
            for (int j=left;j <=right;j++) {
                arr[index++] = nums[j];
            }
            Arrays.sort(arr);
            int num = arr[1] - arr[0];
            for (int j = 0;j < length-1;j++) {
                if (arr[j+1] - arr[j] != num) {
                    continue outer;
                }
            }
            res[i] = true;
        }
        List<Boolean> ans = new ArrayList<>();
        for (int i = 0;i < l.length;i++) {
            ans.add(res[i]);
        }
        return ans;
    }
}

 

标签:1630,false,nums,int,length,数组,差子,等差数列
From: https://www.cnblogs.com/fulaien/p/17249836.html

相关文章

  • 1630.等差子数组
    classSolution{publicListcheckArithmeticSubarrays(int[]nums,int[]l,int[]r){intn=l.length;Listans=newArrayList();for(inti=0;i<n;++i)......
  • C#结构体与byte数组相互转化
    ///<summary>///结构体转byte数组///</summary>///<paramname="structObj"></param>///<returns></returns>......
  • 最大子数组和
    题目描述: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入:nums=[-2,1,......
  • 【leetcode-数组】有效的数独
    判断一个 9x9的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在......
  • day23 打卡669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转
    day23打卡669.修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树669.修剪二叉搜索树669题目链接1.迭代法classSolution{public......
  • react函数组件中,父组件调用子组件的方法
    使用ref来处理。父组件里面   子组件里面   ......
  • 用lambda表达式写一个数组映射
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(){ //定义一个整数数组arr,包含五个元素:1,2,3,4,5。 intarr[]={......
  • CF1630E 题解
    题意传送门一个长度为$n$的环状序列${a_i}$,其中的数值满足$1\leqa_i\leqn$,序列中可能有相等的数。序列${a_i}$的一个排列和另外一个排列本质相同,当且......
  • 可持久化数组
    可持久化数组可以写一棵可持久化线段树,不过受到宇宙射线的影响,写了个奇奇怪怪的东西因为是单点修改、单点查询,线段树只有叶子结点有用中间结点没什么用还浪费空间,所以就......
  • Java数组的动态初始化与静态初始化和常见问题
    一、动态初始化数组的格式:数据类型[]数组名=new数据类型[数组长度];在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值。数组默认的初始值规律:1、......