day1 分割陣列

2022-07-17 03:24:16 字數 2085 閱讀 4271

// 小白一名,0演算法基礎,艱難嘗試演算法題中,若您發現本文中錯誤,

或有其他見解,往不吝賜教,感激不盡,拜謝。

領扣 第915題 今日演算法

題幹//給定乙個陣列 a,將其劃分為兩個不相交(沒有公共元素)的連續子陣列 left 和 right, 使得:

//// left 中的每個元素都小於或等於 right 中的每個元素。

// left 和 right 都是非空的。

// left 要盡可能小。

// 在完成這樣的分組後返回 left 的長度。可以保證存在這樣的劃分方法。

// 示例 1:

//// 輸入:[5,0,3,8,6]

// 輸出:3

// 解釋:left = [5,0,3],right = [8,6]

// 示例 2:

//// 輸入:[1,1,1,0,6,12]

// 輸出:4

// 解釋:left = [1,1,1,0],right = [6,12]

初次使用方法

/*

* 看到這道題的第一思路就是建立乙個左陣列,

* 通過一層迴圈賦值並求出最大數,

* 再進行一次迴圈來與右陣列的元素依次進行比較

* 完善並測試了下**後提交發現超出時間限制

* */

1

public

static

int partitiondisjoint(int

a) 21}

22//

標記更改 繼續迴圈 未更改 獲得長度

23if

(flag) 26}

27return 0;

28 }

第一次**

/*

* 個人總經問題出現在了鏈式集合上,進行了許多沒必要的操作

* 例如 新增 排序 解題的思路除了問題

* 這時感覺應該找尋一下規律

* 發現獲得最大值沒必要全部左陣列進行比較

* 使用之前的最大值與新加入的值進行比較就可以了

* 本著這種思路測試後 58組資料處理時間6ms左右

* */

public

static

int partitiondisjoint1(int

a) }

//如標記未發生更改,即左右陣列已經符合條件 跳出所有迴圈

if(flag)

/** 未跳出迴圈 當前新填入的值與之前的最大值進行比較

* 大於則互換,小於則不變

* */if (max < a[a + 1])

}//返回長度

return a + 1;

}

第二次**

/*

* 目前最優**的思路很清晰,考慮的跟周全

* 老實說 感覺他的**更富有些 美感?

* 不知道是不是 因為他是目前最優的原因

* 雖然他的邏輯我能理解

* 但是總感覺有更深的細節在其中

* 作為乙個剛剛踏入演算法領域的小白

* 我覺得未來還有很長的路要走

* 還有很多的東西要學

* */

1

public

static

int bestmehtod(int

a) else

else39}

4041}42

43}44//

返回長度

45return

i;46 }

目前答案中最優**

我們生活在泥沼之中,但是有人依然仰望星空。

we are all in the gutter, but some of us are looking at the stars.

寫於2018.11.16 

day1 樹狀陣列

樹狀陣列是乙個查詢和修改複雜度都為o logn 的資料結構,主要解決動態陣列字首和 區間和。字首和 修改陣列元素 a1,a2,a3 an 詢問a1 a2 a3 am 修改ai 1 i n 暴力 複雜度o n 2 樹狀陣列 d 6 a5 a6 110 2 1 d 8 a1 a8 1000 2 3 如下...

leetcode 915 分割陣列

給定乙個陣列a,將其劃分為兩個不相交 沒有公共元素 的連續子陣列left和right,使得 在完成這樣的分組後返回left的長度。可以保證存在這樣的劃分方法。示例 1 輸入 5,0,3,8,6 輸出 3解釋 left 5,0,3 right 8,6 示例 2 輸入 1,1,1,0,6,12 輸出 4...

Leetcode 915 分割陣列

給定乙個陣列a,將其劃分為兩個不相交 沒有公共元素 的連續子陣列left和right,使得 在完成這樣的分組後返回left的長度。可以保證存在這樣的劃分方法。示例 1 輸入 5,0,3,8,6 輸出 3解釋 left 5,0,3 right 8,6 示例 2 輸入 1,1,1,0,6,12 輸出 4...