mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Merge pull request #1821 from juguagua/leetcode-modify-the-code-of-the-greedy
更新贪心部分:至 监控二叉树
This commit is contained in:
@ -207,24 +207,26 @@ class Solution:
|
||||
```
|
||||
|
||||
### Go
|
||||
```golang
|
||||
```go
|
||||
func merge(intervals [][]int) [][]int {
|
||||
//先从小到大排序
|
||||
sort.Slice(intervals,func(i,j int)bool{
|
||||
return intervals[i][0]<intervals[j][0]
|
||||
sort.Slice(intervals, func(i, j int) bool {
|
||||
return intervals[i][0] < intervals[j][0]
|
||||
})
|
||||
//再弄重复的
|
||||
for i:=0;i<len(intervals)-1;i++{
|
||||
if intervals[i][1]>=intervals[i+1][0]{
|
||||
intervals[i][1]=max(intervals[i][1],intervals[i+1][1])//赋值最大值
|
||||
intervals=append(intervals[:i+1],intervals[i+2:]...)
|
||||
i--
|
||||
res := make([][]int, 0, len(intervals))
|
||||
left, right := intervals[0][0], intervals[0][1]
|
||||
for i := 1; i < len(intervals); i++ {
|
||||
if right < intervals[i][0] {
|
||||
res = append(res, []int{left, right})
|
||||
left, right = intervals[i][0], intervals[i][1]
|
||||
} else {
|
||||
right = max(right, intervals[i][1])
|
||||
}
|
||||
}
|
||||
return intervals
|
||||
res = append(res, []int{left, right}) // 将最后一个区间放入
|
||||
return res
|
||||
}
|
||||
func max(a,b int)int{
|
||||
if a>b{
|
||||
func max(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
|
@ -62,9 +62,9 @@
|
||||
|
||||
每次取非交叉区间的时候,都是可右边界最小的来做分割点(这样留给下一个区间的空间就越大),所以第一条分割线就是区间1结束的位置。
|
||||
|
||||
接下来就是找大于区间1结束位置的区间,是从区间4开始。**那有同学问了为什么不从区间5开始?别忘已经是按照右边界排序的了**。
|
||||
接下来就是找大于区间1结束位置的区间,是从区间4开始。**那有同学问了为什么不从区间5开始?别忘了已经是按照右边界排序的了**。
|
||||
|
||||
区间4结束之后,在找到区间6,所以一共记录非交叉区间的个数是三个。
|
||||
区间4结束之后,再找到区间6,所以一共记录非交叉区间的个数是三个。
|
||||
|
||||
总共区间个数为6,减去非交叉区间的个数3。移除区间的最小数量就是3。
|
||||
|
||||
@ -183,23 +183,19 @@ public:
|
||||
```java
|
||||
class Solution {
|
||||
public int eraseOverlapIntervals(int[][] intervals) {
|
||||
Arrays.sort(intervals, (a, b) -> {
|
||||
// 按照区间右边界升序排序
|
||||
return a[1] - b[1];
|
||||
Arrays.sort(intervals, (a,b)-> {
|
||||
return Integer.compare(a[0],b[0]);
|
||||
});
|
||||
|
||||
int count = 0;
|
||||
int edge = Integer.MIN_VALUE;
|
||||
for (int i = 0; i < intervals.length; i++) {
|
||||
// 若上一个区间的右边界小于当前区间的左边界,说明无交集
|
||||
if (edge <= intervals[i][0]) {
|
||||
edge = intervals[i][1];
|
||||
} else {
|
||||
int count = 1;
|
||||
for(int i = 1;i < intervals.length;i++){
|
||||
if(intervals[i][0] < intervals[i-1][1]){
|
||||
intervals[i][1] = Math.min(intervals[i - 1][1], intervals[i][1]);
|
||||
continue;
|
||||
}else{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
return intervals.length - count;
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -208,16 +204,15 @@ class Solution {
|
||||
```java
|
||||
class Solution {
|
||||
public int eraseOverlapIntervals(int[][] intervals) {
|
||||
|
||||
Arrays.sort(intervals,(a,b)->{
|
||||
Arrays.sort(intervals, (a,b)-> {
|
||||
return Integer.compare(a[0],b[0]);
|
||||
});
|
||||
int remove = 0;
|
||||
int pre = intervals[0][1];
|
||||
for(int i=1;i<intervals.length;i++){
|
||||
if(pre>intervals[i][0]) {
|
||||
for(int i = 1; i < intervals.length; i++) {
|
||||
if(pre > intervals[i][0]) {
|
||||
remove++;
|
||||
pre = Math.min(pre,intervals[i][1]);
|
||||
pre = Math.min(pre, intervals[i][1]);
|
||||
}
|
||||
else pre = intervals[i][1];
|
||||
}
|
||||
@ -242,27 +237,26 @@ class Solution:
|
||||
```
|
||||
|
||||
### Go
|
||||
```golang
|
||||
```go
|
||||
func eraseOverlapIntervals(intervals [][]int) int {
|
||||
var flag int
|
||||
//先排序
|
||||
sort.Slice(intervals,func(i,j int)bool{
|
||||
return intervals[i][0]<intervals[j][0]
|
||||
sort.Slice(intervals, func(i, j int) bool {
|
||||
return intervals[i][1] < intervals[j][1]
|
||||
})
|
||||
fmt.Println(intervals)
|
||||
for i:=1;i<len(intervals);i++{
|
||||
if intervals[i-1][1]>intervals[i][0]{
|
||||
flag++
|
||||
intervals[i][1]=min(intervals[i-1][1],intervals[i][1])//由于是先排序的,所以,第一位是递增顺序,故只需要将临近两个元素的第二个值最小值更新到该元素的第二个值即可作之后的判断
|
||||
res := 1
|
||||
for i := 1; i < len(intervals); i++ {
|
||||
if intervals[i][0] >= intervals[i-1][1] {
|
||||
res++
|
||||
} else {
|
||||
intervals[i][1] = min(intervals[i - 1][1], intervals[i][1])
|
||||
}
|
||||
}
|
||||
return flag
|
||||
return len(intervals) - res
|
||||
}
|
||||
func min(a,b int)int{
|
||||
if a>b{
|
||||
return b
|
||||
func min(a, b int) int {
|
||||
if a < b {
|
||||
return a
|
||||
}
|
||||
return a
|
||||
return b
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -217,25 +217,25 @@ class Solution: # 贪心思路
|
||||
```
|
||||
|
||||
### Go
|
||||
```golang
|
||||
```go
|
||||
func maxProfit(prices []int, fee int) int {
|
||||
var minBuy int = prices[0] //第一天买入
|
||||
var res int
|
||||
for i:=0;i<len(prices);i++{
|
||||
for i := 0; i < len(prices); i++ {
|
||||
//如果当前价格小于最低价,则在此处买入
|
||||
if prices[i]<minBuy{
|
||||
minBuy=prices[i]
|
||||
if prices[i] < minBuy {
|
||||
minBuy = prices[i]
|
||||
}
|
||||
//如果以当前价格卖出亏本,则不卖,继续找下一个可卖点
|
||||
if prices[i]>=minBuy&&prices[i]-fee-minBuy<=0{
|
||||
if prices[i] >= minBuy && prices[i]-fee-minBuy <= 0 {
|
||||
continue
|
||||
}
|
||||
//可以售卖了
|
||||
if prices[i]>minBuy+fee{
|
||||
if prices[i] > minBuy+fee {
|
||||
//累加每天的收益
|
||||
res+=prices[i]-minBuy-fee
|
||||
res += prices[i]-minBuy-fee
|
||||
//更新最小值(如果还在收获利润的区间里,表示并不是真正的卖出,而计算利润每次都要减去手续费,所以要让minBuy = prices[i] - fee;,这样在明天收获利润的时候,才不会多减一次手续费!)
|
||||
minBuy=prices[i]-fee
|
||||
minBuy = prices[i]-fee
|
||||
}
|
||||
}
|
||||
return res
|
||||
|
@ -179,7 +179,7 @@ class Solution:
|
||||
```
|
||||
|
||||
### Go
|
||||
```golang
|
||||
```go
|
||||
func monotoneIncreasingDigits(N int) int {
|
||||
s := strconv.Itoa(N)//将数字转为字符串,方便使用下标
|
||||
ss := []byte(s)//将字符串转为byte数组,方便更改。
|
||||
@ -187,10 +187,10 @@ func monotoneIncreasingDigits(N int) int {
|
||||
if n <= 1 {
|
||||
return N
|
||||
}
|
||||
for i:=n-1 ; i>0; i-- {
|
||||
if ss[i-1] > ss[i] {//前一个大于后一位,前一位减1,后面的全部置为9
|
||||
for i := n-1; i > 0; i-- {
|
||||
if ss[i-1] > ss[i] { //前一个大于后一位,前一位减1,后面的全部置为9
|
||||
ss[i-1] -= 1
|
||||
for j := i ; j < n; j++ {//后面的全部置为9
|
||||
for j := i; j < n; j++ { //后面的全部置为9
|
||||
ss[j] = '9'
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user