// 小白一名,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...