Algorithm
lc857_雇佣K名工人的最低成本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
/*
mincostToHireWorkers 雇佣k人的最低成本
只想到暴力得枚举k人,然后根据质量比例计算薪水
贪心是希望先找到一个质量最高,然后期望薪资最低的人,然后用继续贪心第二个人
也就是计算质量/期望...但是第一个例子就直接否定了这个思路
看答案吧
总质量值是可以变动的,不同的质量值有不同的最小薪资和,答案还是666
*/
func mincostToHireWorkers(quality, wage []int, k int) float64 {
n := len(quality)
h := make([]int, n)
for i := range h {
h[i] = i
}
// 权重小到大排序
sort.Slice(h, func(i, j int) bool {
a, b := h[i], h[j]
return quality[a]*wage[b] > quality[b]*wage[a]
})
totalq := 0
q := hp{}
for i := 0; i < k-1; i++ {
totalq += quality[h[i]]
heap.Push(&q, quality[h[i]])
}
ans := 1e9
for i := k - 1; i < n; i++ {
idx := h[i]
totalq += quality[idx]
heap.Push(&q, quality[idx])
ans = math.Min(ans, float64(wage[idx])/float64(quality[idx])*float64(totalq))
totalq -= heap.Pop(&q).(int)
}
return ans
}
type hp struct{ sort.IntSlice }
func (h hp) Less(i, j int) bool { return h.IntSlice[i] > h.IntSlice[j] }
func (h *hp) Push(v interface{}) { h.IntSlice = append(h.IntSlice, v.(int)) }
func (h *hp) Pop() interface{} {
a := h.IntSlice
v := a[len(a)-1]
h.IntSlice = a[:len(a)-1]
return v
}
|
Review
【TED演讲】经济增长停滞不前,我们如何修复它
国家和企业以及一些其他的组织,应该打开心胸,通力合作,帮助较贫困的人群提升创造价值的能力,这样才能使得整体的经济上升,才能让人们生活更加幸福,社会更加稳定
Tips
如何选择团队
Share-斯多葛主义看书思考分享
对于我们无法控制的事情,我们应该尽量不要去关注,比如看lol电子竞技的时候,我们完全无法决定哪个队会赢,哪个队会输,所以观看这个比赛的时候,不要过分期望某一个队伍的输赢,而是去学习里面的战术,里面的竞技精神,里面的一些感动人心的事情,去获取一些自身的精神上的一些快乐和成长。以及增加自己的一些大局观。
但是目前看来,这些比赛,其实大量结果都是我们控制不了的,所以不看相对来说更好,不如自己打一把游戏,或者去做一些自己能够控制的,让自己未来更到更舒服的事情反而会变得更好,嗯嗯,确实如此。
所以还是多看书,锻炼身体比较好。