【问题标题】:Find value that occurs consecutively most nunber of times in array查找数组中连续出现次数最多的值
【发布时间】:2017-06-27 18:18:42
【问题描述】:

以下代码是java语言:

int[] array = {1,2,2,3,3,3,2,2,1};
int k = 2;

我需要做的是找到连续出现 k 次以上的值(在本例中为 3)。 occurs>k 只能有一个值,如果不存在这样的值,print -1

解释:
1 只连续出现 1 次。
2出现2次但不是>k。
3出现3次,即>k。由于只能有一个可能的答案,您可以停止在更多值中搜索答案并打印 3。
代码时间限制为0.25s

更新:到目前为止我所做的尝试

import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int[] array = {1,2,2,3,3,3,2,2,1};
        int k=2;
        int result = -1;
        for(int lom =0;lom<array.length-1;lom++){
            int temp = 0;
            int lo=lom;
            while(array[lo]==array[lom]){
                temp+=1;
                if(lo<array.length){lo++;}else{break;}
            }
            if(temp>k){
                result = array[lom];
                break;
            }
        }
        System.out.println(result);
    }
}

当我尝试通过这个解决大约 10 个查询时,它需要 2 秒。我必须在 1 中完成它。您能否提出一些优化代码的方法,以便我可以研究它,然后再试一次。

【问题讨论】:

  • 好的,到目前为止尝试了什么?
  • 我投票决定将此问题作为题外话结束,因为它似乎是一个剪切和粘贴的作业,没有花费一分精力。
  • ideone.com/e.js/ZZT3Ay
  • 我尝试了很多,我的代码有效。唯一的问题是当我尝试用它解决大约 10 个查询时需要很长时间

标签: java arrays performance loops time


【解决方案1】:

你不需要用while循环和lo遍历两次

1.) 使用循环遍历

2.) 如果跟踪元素序列

3.) 如果元素发生变化,重置轨道

4.) 当轨道到达k 上方时打破循环

    int[] array = {1,2,2,3,3,3,2,2,1};
    int k = 2;
    // get first element
    int element=array[0];

    // set tot to 1 
    int tot=1;
        for (int i = 1; i < array.length; i++) {
            // if values are same , increment tot
            if (element==array[i]) {
                tot++;
            }else {
                // set element to new found value and tot = 1
                element=array[i];
                tot=1;
            }
            // when any elements exceeds the k limit 
            // print element and stop the loop
            if (tot>k) {
                System.out.println(array[i]);
                break;
            }
        }
        // to print -1 if tot > k never reached
        if (!(tot>k)) {
            System.out.println(-1);
        }

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 2011-04-29
    • 2019-10-27
    • 1970-01-01
    • 2011-04-17
    • 2020-02-21
    • 2013-07-14
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多