這題的貪婪想法其實很簡單「給比較容易滿足的孩子,他能接受的最小的餅乾。」
下面是程式碼實作:
import java.util.Queue
import java.util.LinkedList
fun main(){
var n = readln().toInt()
var kid = readln().split(" ")
var m = readln().toInt()
var cookie = readln().split(" ")
var kid_queue:Queue<Int> = LinkedList<Int>()
var cookie_queue:Queue<Int> = LinkedList<Int>()
for(i in 0..n-1){
kid_queue.add(kid[i].toInt())
}
for(j in 0..m-1){
cookie_queue.add(cookie[j].toInt())
}
var ans = 0
while(kid_queue.isEmpty()==false){
while(!cookie_queue.isEmpty() && cookie_queue.peek() < kid_queue.peek()){
cookie_queue.remove()
}
if(cookie_queue.peek() >= kid_queue.peek()){
ans++
cookie_queue.remove()
}
kid_queue.remove()
}
println("$ans")
}
我這裡是使用了queue,因為我剛好需要先把輸入全部轉成int,在那之後我只需要照順序使用我的資料。
不過只要能解出來都是好寫法喔~
今天開始來介紹排序sort,排序一直是演算法中很重要的一環,探討的是怎麼把一個陣列內的內容依照我們的要求(通常是由小到大)排列。
泡沫是排序最常見的作法,他的時間複雜度是O(N²)。
他的做法是,從前兩格開始,如果大小順序相反就交換,然後再去看2、3格,一直比下去,就一定可以將最大的移到最右邊。再跑一遍就可以把第二大的移動到右邊第二格,所以重複n次就可以將陣列排序咯~
import java.util.Queue
import java.util.LinkedList
fun main(){
var a = arrayOf<Int>(415,3,3,34,542,7,2345,4,32,32,765,5,6,9,658)
for(i in 0..a.size-1){
for(j in 0..a.size-2){
if(a[j] > a[j+1]){
var temp = a[j]
a[j] = a[j+1]
a[j+1] = temp
}
}
}
for(i in 0..a.size-1){
println("${a[i]}")
}
}
其實這個程式碼中,還有一個地方可以優化,就交給你們回去試試看吧。