求數(shù)組最大平均值的連續(xù)子序列泳炉、最大和的連續(xù)子序列

算法是我最頭疼的問題,經(jīng)常被問到就懵逼嚎杨,但是后來一想就能想起來花鹅,也是沒那么能難,人啊就是要多總結(jié)枫浙,人類的進(jìn)步就是因?yàn)槿税阎R(shí)記載了下來刨肃,后來的人有了前人的經(jīng)驗(yàn)教訓(xùn),總會(huì)成長(zhǎng)箩帚,慢慢成長(zhǎng)真友。在歲月的長(zhǎng)河中,知識(shí)達(dá)到了沉淀紧帕,孕育了很多偉大的民族文化盔然。桅打。。

實(shí)在編不下去了愈案,趕緊進(jìn)入正題挺尾,同學(xué)啊,在你看到題目的時(shí)候也是一臉懵逼站绪,如果是的話遭铺,那就對(duì)了,證明你沒看過類似的算法恢准,看到題目有種似懂非懂的感覺魂挂,光是理解題目就是很費(fèi)勁,沒錯(cuò)馁筐,因?yàn)檫@個(gè)題就是考的腦筋急轉(zhuǎn)彎涂召?啥,不明白啊眯漩,等我說完你就知道了芹扭。。赦抖。

還在扯什么啊舱卡,怎么還不進(jìn)入正題呢?很多人肯定要罵我了队萤,其實(shí) 我是留給大家思考的時(shí)間轮锥,因?yàn)榇蠹以倏催@段廢話的時(shí)候大腦卻在想著我的問題,為什么我·會(huì)這么說要尔,哈哈 我看過最強(qiáng)大腦舍杜,去年這個(gè)的時(shí)候,我因?yàn)樽顝?qiáng)大腦赵辕,花了一個(gè)月的時(shí)間專門去訓(xùn)練了記憶力既绩,你還別說,還真有效果还惠。我先練習(xí)的定樁饲握,110數(shù)字樁,懂的同學(xué)知道我在說什么蚕键,不懂的同學(xué)我也不會(huì)在這說了救欧,給你個(gè)傳送門,好吧開始進(jìn)入正題吧锣光。

package zong.xiao.mi.demosource.java;

/**
 * Created by mi on 2017/4/5.
 */

public class 最大平均值的連續(xù)子序列 {


  public static int[] array = {-2, 3, -5, 4, 1, -1, 2};

  public static void main(String[] arguments) {
    maxAverage(array);
    maxSum(array);
  }



  /**
   * 求數(shù)組的最大平均值的連續(xù)子序列(連續(xù)子序列:元素個(gè)數(shù)大于等于2)
   * 
   * @return
   */
  public static int[] maxAverage(int[] array) {

    int length = array.length;
    int sum;
    float currentAvg = 0;// 當(dāng)前的平均值
    int markI = 0;// 標(biāo)記連續(xù)子序列的起始下標(biāo)
    int markJ = 0;// 標(biāo)記連續(xù)子序列的結(jié)束下標(biāo)
    for (int i = 0; i < length; i++) {
      sum = 0;// 重置sum
      for (int j = i; j < length; j++) {
        sum = sum + array[j];// 累積求和
        float avg = (float) sum / (j - i + 1);
        if (avg > currentAvg && i != j) {// 如果起始下標(biāo)等于結(jié)束下標(biāo)笆怠,就是表明是單個(gè)元素,此塊要排除
          markJ = j;
          markI = i;
          currentAvg = avg;
        }
      }
    }
    int arr[] = new int[markJ - markI + 1];
    System.arraycopy(array, markI, arr, 0, markJ - markI + 1);

    System.out.println("最大平均值==" + currentAvg + "-在數(shù)組中的起始位置==" + markI + "-數(shù)組中的結(jié)束位置==" + markJ);
    return arr;
  }

  /**
   * 最大和的連續(xù)子序列
   * 時(shí)間復(fù)雜度O(N^2)
   * @param array
   * @return
   */
  public static int[] maxSum(int array[]) {
    if (array == null || array.length == 0) return null;
    int length = array.length;
    int sum = 0;
    int currentSum = 0;
    int markStart = 0;
    int markEnd = 0;

    for (int i = 0; i < length; i++) {
      sum = 0;
      for (int j = i; j < length; j++) {
        sum += array[j];
        if (sum > currentSum) {
          markStart = i;
          markEnd = j;
          currentSum = sum;
        }
      }
    }
    int[] copy = new int[markEnd - markStart + 1];
    System.arraycopy(array, markStart, copy, 0, markEnd - markStart + 1);
    System.out
        .println("最大和==" + currentSum + "-在數(shù)組中的起始位置==" + markStart + "-數(shù)組中的結(jié)束位置==" + markEnd);
    return copy;
  }
}



多么簡(jiǎn)單粗暴誊爹,代碼自己看吧蹬刷,注釋都在上面瓢捉。
補(bǔ)充求和的第二種方法,性能更優(yōu)办成。

/**
   * 最大和的連續(xù)子序列第二種方法
   *
   * 時(shí)間復(fù)雜度O(N)
   * 
   * @param array
   * @return
   */
  public static int[] maxSum2(int array[]) {

    int temp = 0;
    int currentMax = 0;
    int length = array.length;
    int start = 0;// 標(biāo)記開始位置
    int end = 0;// 標(biāo)記結(jié)束位置

    for (int i = 0; i < length; i++) {
      if (temp + array[i] > 0) {
        temp = temp + array[i];
      } else {
        temp = 0;
        start = i + 1;
      }

      if (temp > currentMax) {
        end = i;
        currentMax = temp;
      }
    }
    System.out.println(currentMax + "start==" + start + "end==" + end);
    return null;
  }

第二個(gè)算法的時(shí)間復(fù)雜度最好泊柬,只用了一遍遍歷

說個(gè)注意的點(diǎn),什么是連續(xù)子序列诈火,我認(rèn)為啊這個(gè)連續(xù)子序列的元素的個(gè)數(shù)要大于兩個(gè)才能算連續(xù)子序列。如果沒有這個(gè)限制會(huì)怎么樣状答?
如果沒有這個(gè)限制冷守,上邊數(shù)組中的最大連續(xù)子序列 我不用算就知道是4 ,我不相信哪個(gè)子序列的平均值會(huì)大于4惊科,為什么拍摇,因?yàn)槿魏我粋€(gè)數(shù),加上比自己小的數(shù)馆截,再求平均值充活,肯定沒有這個(gè)數(shù)大。如果有這個(gè)限制蜡娶,那就從所有含有兩個(gè)元素的子序列里面找混卵。因?yàn)槿齻€(gè)數(shù)的平均值肯定沒有兩個(gè)的數(shù)的平均值大。如果這幾個(gè)元素都是一樣大小值的 你就別給我扯淡了窖张。幕随。

最大平均值的連續(xù)子序列: 求出數(shù)組所有的連續(xù)子序列,對(duì)每個(gè)連續(xù)子序列求平均值宿接,找最大的一個(gè)赘淮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市睦霎,隨后出現(xiàn)的幾起案子梢卸,更是在濱河造成了極大的恐慌,老刑警劉巖副女,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤高,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肮塞,警方通過查閱死者的電腦和手機(jī)襟齿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枕赵,“玉大人半夷,你說我怎么就攤上這事⌒醭常” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵涧黄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我赋荆,道長(zhǎng)笋妥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任窄潭,我火速辦了婚禮春宣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫉你。我一直安慰自己月帝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布幽污。 她就那樣靜靜地躺著嚷辅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪距误。 梳的紋絲不亂的頭發(fā)上簸搞,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音准潭,去河邊找鬼趁俊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惋鹅,可吹牛的內(nèi)容都是我干的则酝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼闰集,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼沽讹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起武鲁,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤爽雄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后沐鼠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挚瘟,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年饲梭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乘盖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡憔涉,死狀恐怖订框,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兜叨,我是刑警寧澤穿扳,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布衩侥,位于F島的核電站,受9級(jí)特大地震影響矛物,放射性物質(zhì)發(fā)生泄漏茫死。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一履羞、第九天 我趴在偏房一處隱蔽的房頂上張望峦萎。 院中可真熱鬧,春花似錦忆首、人聲如沸骨杂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛤售,卻和暖如春丁鹉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悴能。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工揣钦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漠酿。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓冯凹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親炒嘲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宇姚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評(píng)論 25 707
  • 題目描述 給定n個(gè)數(shù)的數(shù)組,找到所有長(zhǎng)度大于等于k的連續(xù)子數(shù)組中平均值最大的那個(gè)夫凸。返回那個(gè)最大的平均值浑劳。 1 <=...
    HITMiner閱讀 4,023評(píng)論 0 1
  • 前言 其實(shí)讀完斯坦福的這本《互聯(lián)網(wǎng)大規(guī)模數(shù)據(jù)挖掘》,讓我感覺到夭拌,什么是人工智能魔熏?人工智能就是更高層次的數(shù)據(jù)挖掘。機(jī)...
    我偏笑_NSNirvana閱讀 12,511評(píng)論 1 23
  • 像我這樣懶散鸽扁,且又沒有責(zé)任感的人蒜绽,最大的愿望,便是不用工作桶现,也不用理會(huì)俗世的那些繁文禮節(jié)躲雅,每天只是把自己收拾的干干...
    成誠師兄閱讀 188評(píng)論 0 0
  • 辛苦了大半輩子 汗水和青春都留在了黑土地上 在夕陽的余暉里 我想明白了 總該為自己做點(diǎn)什么吧 約上山羊一家和唱...
    云淡風(fēng)輕之藍(lán)閱讀 592評(píng)論 41 44