精华内容
下载资源
问答
  • * 是否连续n天出现,实现逻辑:指定时间段,获取该时间段内检索结果,根据时间段判断是否连续出现 * @param results * [ * { * "record": { * "createTime": "2020-06-17T09:13:00.051Z", * "id": "xxxxxxxxx...

    实现思路

    /**
         * 是否连续n天出现,实现逻辑:指定时间段,获取该时间段内检索结果,根据时间段判断是否连续出现
         * @param results
         * [
         *     {
         *         "record": {
         *             "createTime": "2020-06-17T09:13:00.051Z",
         *             "id": "xxxxxxxxx",
         *         },
         *         "money": 22
         *     }
         * ]
         * 计算逻辑解释:假设有4条分别在前1,2,3,3天出现,则每天命中值为1<<1, 1<<2, 1<<3, 1<<3, 判断是否在前3天连续出现,
         * 只需将每条记录的命中值联合取|,即2,4,8,8一起取| => 2|4|8|8,判断其结果与(2^3)-1是否相等即可。相等则连续,不等则非连续
         *
         * @return
         */
        private boolean checkContinuousAppear(List<User> results) {
            if (CollectionUtils.isEmpty(results)) {
                throw new IllegalArgumentException("user results can't be null or empty!");
            }
            List<Integer> hitsCollection = results.stream().map(e -> hitBit(e.getRecord().getCreateTime())).collect(Collectors.toList());
            Integer result = hitsCollection.stream().reduce((x1, x2) -> x1 | x2).get();
            if (result.equals((1 << bizConfig.getContinuousOccurDays()) - 1)) {
                return true;
            }
            return false;
        }
    
        /**
         * 使用移位记录每个时间点是否命中
         * 1 2 4 8 16 32 .....
         *
         * @param time
         * @return
         */
        private int hitBit(Instant time) {
            LocalDate beforeNDate = LocalDate.now().minusDays(bizConfig.getContinuousOccurDays());
            for (int i = 0; i < bizConfig.getContinuousOccurDays(); i++) {
                Instant start, end;
                if (i == 0) {
                    start = beforeNDate.atStartOfDay().toInstant(ZoneOffset.UTC);
                } else {
                    start = beforeNDate.plusDays(i).atStartOfDay().toInstant(ZoneOffset.UTC);
                }
                end = beforeNDate.plusDays(i + 1).atStartOfDay().toInstant(ZoneOffset.UTC);
                if (hitTime(time, start, end)) {
                    return 1<< i;
                }
            }
            return 1;
        }
    /**
         * 判断给定时间是否在时间区间内
         * @param target
         * @param start
         * @param end
         * @return
         */
        private boolean hitTime(Instant target, Instant start, Instant end) {
            if (target.toEpochMilli() >= start.toEpochMilli() && target.toEpochMilli() <= end.toEpochMilli()) {
                return true;
            }
            return false;
        }
    

    此逻辑同样可推广至最近n小时,n分钟,n秒之类的判断

    展开全文
  • 判断数值是否连续

    2020-08-12 15:08:27
    isContinuityNum(num){ //判断选中的时间段是否连续 let array=[]; if(num instanceof Array){ array = [...num]; }else{ array = Array.from(num.toString())//转换为数组 } array...

    判断一串数值之间是不是连续

    	isContinuityNum(num){  //判断选中的时间段是否连续
    				let array=[];
    				if(num instanceof Array){
    					array = [...num];
    				}else{
    					array = Array.from(num.toString())//转换为数组
    				}            
    				array.sort(function(a,b){   //要做一下排序,不然如果顺序颠倒过来就无法判断数值是否连续了
    					return a- b;
    				});
    				var i=array[0];
    				var isContinuation=true;
    				for(var e in array){
    						if(array[e]!=i){
    								isContinuation=false;
    								break;
    						}
    						i++;
    				}
    				return isContinuation;
    		},
    
    
    展开全文
  • 判断日期是否连续

    2021-01-05 13:58:19
    hql统计连续登录三天及以上的用户 数据提供 用户ID、登入日期 user01,2018-02-28 user01,2018-03-01 user01,2018-03-02 user01,2018-03-04 user01,2018-03-05 user01,2018-03-06 user01,2018-03-07 user02,...
    hql统计连续登录三天及以上的用户

    数据提供

     用户ID、登入日期
     user01,2018-02-28
     user01,2018-03-01
     user01,2018-03-02
     user01,2018-03-04
     user01,2018-03-05
     user01,2018-03-06
     user01,2018-03-07
     user02,2018-03-01
     user02,2018-03-02
     user02,2018-03-03
     user02,2018-03-06
    

    输出字段

    user_id | times | start_date | end_date
    

    创建表

     create table lxdl(
     user_id string comment '用户ID'
     ,login_date date comment '登入日期'
     )
     row format delimited fields terminated by ',';
    

    加载数据

    load data local inpath '/opt/module/datas/dsjsfc/user.txt' into table lxdl;
    

    验证数据

    select * from lxdl;
    +---------------+------------------+--+
    | lxdl.user_id  | lxdl.login_date  |
    +---------------+------------------+--+
    |  user01       | 2018-02-28       |
    |  user01       | 2018-03-01       |
    |  user01       | 2018-03-02       |
    |  user01       | 2018-03-04       |
    |  user01       | 2018-03-05       |
    |  user01       | 2018-03-06       |
    |  user01       | 2018-03-07       |
    |  user02       | 2018-03-01       |
    |  user02       | 2018-03-02       |
    |  user02       | 2018-03-03       |
    |  user02       | 2018-03-06       |
    +---------------+------------------+--+
    

    思路

    1.根据user_id分区,日期排序

    select 
    	user_id,login_date,
    	row_number() over(partition by user_id order by login_date) as rn 
    from 
    	lxdl;
    

    输出

    +-------------+-------------+-------+--+
    | user_id     |	login_date	|	rn  |  
    +-------------+-------------+-------+--+
    | user01	  |	2018-02-28	|	1	|
    | user01	  |	2018-03-01	|	2   |
    | user01	  |	2018-03-02	|	3	|
    | user01	  |	2018-03-04	|	4	|
    | user01	  |	2018-03-05	|	5	|
    | user01	  |	2018-03-06	|	6	|
    | user01	  |	2018-03-07	|	7	|
    | user02	  |	2018-03-01	|	1	|
    | user02	  |	2018-03-02	|	2	|
    | user02	  |	2018-03-03	|	3	|
    | user02	  |	2018-03-06	|	4	|
    +-------------+-------------+-------+--+
    

    2.用日期与rn想减,得到的差值如果相等,则说明日期是连续的

    select 
    	user_id,login_date,
    	date_sub(login_date,rn) as date_diff 
    from 
    	(
        select 
    		user_id,login_date,
    		row_number() over(partition by user_id order by login_date) as rn 
    	from 
    		lxdl
    	) t1;
    

    输出

    +-------------+-------------+-------------+--+
    | user_id     |	login_date	|  date_diff  |  
    +-------------+-------------+-------------+--+
    | user01	  |	2018-02-28	| 2018-02-27  |
    | user01	  |	2018-03-01	| 2018-02-27  |   
    | user01	  |	2018-03-02	| 2018-02-27  |
    | user01	  |	2018-03-04	| 2018-02-28  |
    | user01	  |	2018-03-05	| 2018-02-28  |
    | user01	  |	2018-03-06	| 2018-02-28  |
    | user01	  |	2018-03-07	| 2018-02-28  |
    | user02	  |	2018-03-01	| 2018-02-28  |
    | user02	  |	2018-03-02	| 2018-02-28  |
    | user02	  |	2018-03-03	| 2018-02-28  |
    | user02	  |	2018-03-06	| 2018-03-02  |
    +-------------+-------------+-------------+--+
    

    3.根据user_id和date_diff分组,最小登录日期即为此次连续登录的开始日期start_date,最大登录日期即为结束日期end_date,登录次数即为分组后的count(1)

    select 
    	user_id,count(1) as times,
    	min(login_date) as start_date,
    	max(login_date) as end_date
    from
    	(
            select 
            	user_id,login_date,
            	date_sub(login_date,rn) as date_diff 
            from 
            (
                select 
    				user_id,login_date,
    				row_number() over(partition by user_id order by login_date) as rn 
    			from 
    				lxdl) 
            t1) t2 
    group by user_id,date_diff 
    having times >=3;
    

    输出

    +-----------+-----------+----------------+--------------+--+
    |	user_id	|	times	|	start_date	 |	end_date   	|
    +-----------+-----------+----------------+--------------+--+	
    | 	user01	|	3		|	2018-02-28	 |	2018-03-02	|
    | 	user01	|	4		|	2018-03-04	 |	2018-03-07	|	
    | 	user02	|	3		|	2018-03-01	 |	2018-03-03	|
    +-----------+-----------+----------------+--------------+--+
    
    展开全文
  • 判断数组中的元素是否连续

    千次阅读 2018-07-20 00:14:32
    设计一个算法判断该数组中的元素是否连续。 如果一个数组包含n个元素,并且该数组中元素是连续的,那么它一定具有“数组中最大值元素与最小值元素之差为n-1”的性质。如果这些元素中包含0这样的通配数字,并且保证...

    现有一个整数数组,其元素是0-65535之间的任意数字。一直相同数字不会重复出现,而0可以重复出现,且0可以通配任意一个数字。设计一个算法判断该数组中的元素是否连续。

    如果一个数组包含n个元素,并且该数组中元素是连续的,那么它一定具有“数组中最大值元素与最小值元素之差为n-1”的性质。如果这些元素中包含0这样的通配数字,并且保证数组中的元素是连续的,那么数组中的非零最大值与非零最小值之差不能超过n-1.

    int isContinuousArray(int array[],int len){

    int maxVal=array[0],minVal=array[0];

    int i;

    for(i=1;i<len;i++){

    if(array[i]>maxVal&&array[i]!=0)

          maxVal=array[i];

    else if(array[i]<minVal&&array[i]!=0){

          minVal=array[i];

          }

    }

    if(maxVal-minVal>len-1)

          return 0;

    else{

         return 1;}

    }

     

    展开全文
  • js判断月份是否连续

    2019-07-10 20:57:13
    var arr = ['2016-9', '2016-11', '2016-10', '2016-12', '2017-1', '2017-2'];...//是否连续的标志 var lianxu = true; for(var i=arr.length-1; i>=0; i--){ var dateStr = arr[i].split('-'); ...
  • 判断时间或者数字是否连续

    千次阅读 2019-01-03 15:32:34
    一、判断时间数组是否连续(格式:yyyyMMdd) public static String convert(String[] ints, int index) { int end = index; if (ints.length == index) {//结束条件,遍历完数组 return ""; } ...
  • 数组是这样的 ["2016-12", "2017-1", "2017-2"] 如何用js判断月份是否连续的,在线等大神
  • 判断月份集合是否连续

    千次阅读 2016-05-06 10:41:22
    * 判断月份集合是否连续 * @param monthArr * @returns {Boolean} */ function judgeArray(monthArr) { /** * 解决ie中不支持indexOf */ if (!Array.indexOf) { Array.prototype.indexOf
  • 有没有一个比较有效的方法来检查数组只包含数字键?确切的说,我们希望能够实现这样的区分:$sequentialArray = array('apple', 'orange', 'tomato', 'carrot');和$assocArray = array('fruit1' =>...
  • 判断日期数组是否连续

    千次阅读 2018-06-04 15:55:10
    runningDays(days)为true时,即连续日期。为false时,即不连续日期。 作者:指间行走 链接:https://juejin.im/post/5b07809f6fb9a07ab83e731f 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业...
  • 判断是否连续数字

    千次阅读 2018-01-15 14:29:35
    * 是否连续数字 * * @param numOrStr * @return */ public static boolean isOrderNumeric(String numOrStr) { boolean flag = true; for (int i = 0; i (); i++) { if (i > 0) {
  • 给一串数字,判断是否连续

    千次阅读 2017-04-07 16:51:23
    if (count&(1 (arr[i] - Min))) // 看次数字是否出现过 { num++; // 出现过,num加一 } else { count |= 1 (arr[i] - Min); //1、 count第一个二进制位表示最小数字, } // 左边n...
  • java 判断一个数组中的数值是否连续相邻的方法,java数组* 判断一个数组中的数值是否连续相邻* 满足以下条件:* 1.0是例外可以反复出现 0可以通配任何字符* 2.相同的数值不会重复出现* 3.该数组可以是乱序的* 当数组...
  • 下面小编就为大家带来一篇js 判断一组日期是否连续的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 扑克牌2,3,4……10,J,Q,K,A十三张牌,4个花色,以及大小王组成54张牌,用C语言从中抽取5...判断上述随机抽取的牌是否为顺子 将排序结果追加输出到output.txt文件中 不求完整答案,提供一些思路或部分答案也好,重谢~
  • 判断数组中的数字是否连续相邻

    千次阅读 2016-06-24 20:35:57
    设计一个算法,当从该数列中随意选取5个数值时,判断这5个数值是否连续相邻。需要注意以下4点: (1)5 个数值允许是乱序的,如 8 7 5 0 6。 (2)0 可以通配任意数值,如8 7 5 0 6 中的 0 可以通配 9 或者 4。 ...
  • package 判断集合数据是否连续; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Test1 { /** * 初始化数据 * @return */ public ...
  • 判断是否连续

    2019-03-20 17:16:27
    比如查询db,有结果为 id userid 3 a 4 a 5 a 6 a 7 a 10 a 1 b ...其中a不连续,缺少1,2,8,9 ... b连续, ... c缺少2,不连续。如何sql选出所有的不连续的userid 即a, c ? (实际数据上万条)
  • Java中判断时间段是否连续

    千次阅读 2020-01-11 14:00:18
    Java中判断时间段是否连续 //定义一个数组用于存放时间段 String[] list= {"17:31-18:00","18:01-18:30","18:31-19:00","19:31-20:00","20:01-20:30"}; //循环遍历数组 for(int a=0;a<list.length-1;a...
  • //判断签到时间是否连续时间 continueDays() { let days: any = []; //this.selectedLeanth是后端返回的数组对象,里面每条对象有对应的时间戳数据 this.selectedLeanth.map((item: any) => { let r =
  • 当从该数组序列中随机选取5个数值,判断这5个数值是否连续相邻。 需要注意4点:  1.) 5个数值允许是乱序的,例如{8,7,5,0,6}  2.) 0可以通配任意数值,例如{8,7,5,0,6}中的0可以通配成9或4  3. )0可以多次...
  • js判断字符串是否连续(数字、字母)

    千次阅读 2019-08-26 15:01:00
    JavaScript验证字符串是否全部连贯,一般用于验证密码,避免密码过于简单。 1.实现数字是否连贯的... //用于连续个数的统计 for(var i=1;i<num.length;i++){ if((num[i]-num[i-1]==1)||(num[i]-num[i-1]==-...
  • js判断是否有6个连续数字的字符串的正则
  • 怎么编写程序实现判断一个字符串中的英文字母是由连续的英文字母组成的 比如“ABC”或“DCAB”都是连续的,求大佬
  • 在正则表达式中,利用()进行分组,使用斜杠加数字表示...将[a-zA-Z]做成一个分组,然后引用,就可判断是否连续重复的字母。 function containsRepeatingLetter(str) { return /([a-zA-Z])\1/.test(str); } ...
  • 判断一个数组中的数值是否连续相邻 * 满足以下条件: * 1.0是例外可以反复出现 0可以通配任何字符 * 2.相同的数值不会重复出现 * 3.该数组可以是乱序的 * 当数组不含有0时满足最大值-最小值=n(数组长度)-1 * ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 613,504
精华内容 245,401
关键字:

怎样判断是否连续