build
This commit is contained in:
parent
739f8a31bb
commit
bfd0b3598d
@ -465,33 +465,6 @@ comments: true
|
||||
val v: Int // 物品价值
|
||||
)
|
||||
|
||||
/* 分数背包:贪心 */
|
||||
fun fractionalKnapsack(wgt: IntArray, _val: IntArray, c: Int): Double {
|
||||
// 创建物品列表,包含两个属性:重量、价值
|
||||
var cap = c
|
||||
val items = arrayOfNulls<Item>(wgt.size)
|
||||
for (i in wgt.indices) {
|
||||
items[i] = Item(wgt[i], _val[i])
|
||||
}
|
||||
// 按照单位价值 item.v / item.w 从高到低进行排序
|
||||
items.sortBy { item: Item? -> -(item!!.v.toDouble() / item.w) }
|
||||
// 循环贪心选择
|
||||
var res = 0.0
|
||||
for (item in items) {
|
||||
if (item!!.w <= cap) {
|
||||
// 若剩余容量充足,则将当前物品整个装进背包
|
||||
res += item.v
|
||||
cap -= item.w
|
||||
} else {
|
||||
// 若剩余容量不足,则将当前物品的一部分装进背包
|
||||
res += item.v.toDouble() / item.w * cap
|
||||
// 已无剩余容量,因此跳出循环
|
||||
break
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
/* 分数背包:贪心 */
|
||||
fun fractionalKnapsack(wgt: IntArray, _val: IntArray, c: Int): Double {
|
||||
// 创建物品列表,包含两个属性:重量、价值
|
||||
|
@ -1587,77 +1587,6 @@ index = hash(key) % capacity
|
||||
var _val: String
|
||||
)
|
||||
|
||||
/* 基于数组实现的哈希表 */
|
||||
class ArrayHashMap {
|
||||
// 初始化数组,包含 100 个桶
|
||||
private val buckets = arrayOfNulls<Pair>(100)
|
||||
|
||||
/* 哈希函数 */
|
||||
fun hashFunc(key: Int): Int {
|
||||
val index = key % 100
|
||||
return index
|
||||
}
|
||||
|
||||
/* 查询操作 */
|
||||
fun get(key: Int): String? {
|
||||
val index = hashFunc(key)
|
||||
val pair = buckets[index] ?: return null
|
||||
return pair._val
|
||||
}
|
||||
|
||||
/* 添加操作 */
|
||||
fun put(key: Int, _val: String) {
|
||||
val pair = Pair(key, _val)
|
||||
val index = hashFunc(key)
|
||||
buckets[index] = pair
|
||||
}
|
||||
|
||||
/* 删除操作 */
|
||||
fun remove(key: Int) {
|
||||
val index = hashFunc(key)
|
||||
// 置为 null ,代表删除
|
||||
buckets[index] = null
|
||||
}
|
||||
|
||||
/* 获取所有键值对 */
|
||||
fun pairSet(): MutableList<Pair> {
|
||||
val pairSet = mutableListOf<Pair>()
|
||||
for (pair in buckets) {
|
||||
if (pair != null)
|
||||
pairSet.add(pair)
|
||||
}
|
||||
return pairSet
|
||||
}
|
||||
|
||||
/* 获取所有键 */
|
||||
fun keySet(): MutableList<Int> {
|
||||
val keySet = mutableListOf<Int>()
|
||||
for (pair in buckets) {
|
||||
if (pair != null)
|
||||
keySet.add(pair.key)
|
||||
}
|
||||
return keySet
|
||||
}
|
||||
|
||||
/* 获取所有值 */
|
||||
fun valueSet(): MutableList<String> {
|
||||
val valueSet = mutableListOf<String>()
|
||||
for (pair in buckets) {
|
||||
pair?.let { valueSet.add(it._val) }
|
||||
}
|
||||
return valueSet
|
||||
}
|
||||
|
||||
/* 打印哈希表 */
|
||||
fun print() {
|
||||
for (kv in pairSet()) {
|
||||
val key = kv.key
|
||||
val _val = kv._val
|
||||
println("${key} -> ${_val}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 基于数组实现的哈希表 */
|
||||
class ArrayHashMap {
|
||||
// 初始化数组,包含 100 个桶
|
||||
|
@ -1372,15 +1372,23 @@ comments: true
|
||||
=== "Kotlin"
|
||||
|
||||
```kotlin title="quick_sort.kt"
|
||||
/* 快速排序 */
|
||||
fun quickSort(nums: IntArray, left: Int, right: Int) {
|
||||
// 子数组长度为 1 时终止递归
|
||||
if (left >= right) return
|
||||
// 哨兵划分
|
||||
val pivot = partition(nums, left, right)
|
||||
// 递归左子数组、右子数组
|
||||
quickSort(nums, left, pivot - 1)
|
||||
quickSort(nums, pivot + 1, right)
|
||||
/* 快速排序(尾递归优化) */
|
||||
fun quickSortTailCall(nums: IntArray, left: Int, right: Int) {
|
||||
// 子数组长度为 1 时终止
|
||||
var l = left
|
||||
var r = right
|
||||
while (l < r) {
|
||||
// 哨兵划分操作
|
||||
val pivot = partition(nums, l, r)
|
||||
// 对两个子数组中较短的那个执行快速排序
|
||||
if (pivot - l < r - pivot) {
|
||||
quickSort(nums, l, pivot - 1) // 递归排序左子数组
|
||||
l = pivot + 1 // 剩余未排序区间为 [pivot + 1, right]
|
||||
} else {
|
||||
quickSort(nums, pivot + 1, r) // 递归排序右子数组
|
||||
r = pivot - 1 // 剩余未排序区间为 [left, pivot - 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -1546,77 +1546,6 @@ The following code implements a simple hash table. Here, we encapsulate `key` an
|
||||
var _val: String
|
||||
)
|
||||
|
||||
/* 基于数组实现的哈希表 */
|
||||
class ArrayHashMap {
|
||||
// 初始化数组,包含 100 个桶
|
||||
private val buckets = arrayOfNulls<Pair>(100)
|
||||
|
||||
/* 哈希函数 */
|
||||
fun hashFunc(key: Int): Int {
|
||||
val index = key % 100
|
||||
return index
|
||||
}
|
||||
|
||||
/* 查询操作 */
|
||||
fun get(key: Int): String? {
|
||||
val index = hashFunc(key)
|
||||
val pair = buckets[index] ?: return null
|
||||
return pair._val
|
||||
}
|
||||
|
||||
/* 添加操作 */
|
||||
fun put(key: Int, _val: String) {
|
||||
val pair = Pair(key, _val)
|
||||
val index = hashFunc(key)
|
||||
buckets[index] = pair
|
||||
}
|
||||
|
||||
/* 删除操作 */
|
||||
fun remove(key: Int) {
|
||||
val index = hashFunc(key)
|
||||
// 置为 null ,代表删除
|
||||
buckets[index] = null
|
||||
}
|
||||
|
||||
/* 获取所有键值对 */
|
||||
fun pairSet(): MutableList<Pair> {
|
||||
val pairSet = mutableListOf<Pair>()
|
||||
for (pair in buckets) {
|
||||
if (pair != null)
|
||||
pairSet.add(pair)
|
||||
}
|
||||
return pairSet
|
||||
}
|
||||
|
||||
/* 获取所有键 */
|
||||
fun keySet(): MutableList<Int> {
|
||||
val keySet = mutableListOf<Int>()
|
||||
for (pair in buckets) {
|
||||
if (pair != null)
|
||||
keySet.add(pair.key)
|
||||
}
|
||||
return keySet
|
||||
}
|
||||
|
||||
/* 获取所有值 */
|
||||
fun valueSet(): MutableList<String> {
|
||||
val valueSet = mutableListOf<String>()
|
||||
for (pair in buckets) {
|
||||
pair?.let { valueSet.add(it._val) }
|
||||
}
|
||||
return valueSet
|
||||
}
|
||||
|
||||
/* 打印哈希表 */
|
||||
fun print() {
|
||||
for (kv in pairSet()) {
|
||||
val key = kv.key
|
||||
val _val = kv._val
|
||||
println("${key} -> ${_val}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 基于数组实现的哈希表 */
|
||||
class ArrayHashMap {
|
||||
// 初始化数组,包含 100 个桶
|
||||
|
@ -465,33 +465,6 @@ comments: true
|
||||
val v: Int // 物品價值
|
||||
)
|
||||
|
||||
/* 分數背包:貪婪 */
|
||||
fun fractionalKnapsack(wgt: IntArray, _val: IntArray, c: Int): Double {
|
||||
// 建立物品串列,包含兩個屬性:重量、價值
|
||||
var cap = c
|
||||
val items = arrayOfNulls<Item>(wgt.size)
|
||||
for (i in wgt.indices) {
|
||||
items[i] = Item(wgt[i], _val[i])
|
||||
}
|
||||
// 按照單位價值 item.v / item.w 從高到低進行排序
|
||||
items.sortBy { item: Item? -> -(item!!.v.toDouble() / item.w) }
|
||||
// 迴圈貪婪選擇
|
||||
var res = 0.0
|
||||
for (item in items) {
|
||||
if (item!!.w <= cap) {
|
||||
// 若剩餘容量充足,則將當前物品整個裝進背包
|
||||
res += item.v
|
||||
cap -= item.w
|
||||
} else {
|
||||
// 若剩餘容量不足,則將當前物品的一部分裝進背包
|
||||
res += item.v.toDouble() / item.w * cap
|
||||
// 已無剩餘容量,因此跳出迴圈
|
||||
break
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
/* 分數背包:貪婪 */
|
||||
fun fractionalKnapsack(wgt: IntArray, _val: IntArray, c: Int): Double {
|
||||
// 建立物品串列,包含兩個屬性:重量、價值
|
||||
|
@ -1587,77 +1587,6 @@ index = hash(key) % capacity
|
||||
var _val: String
|
||||
)
|
||||
|
||||
/* 基於陣列實現的雜湊表 */
|
||||
class ArrayHashMap {
|
||||
// 初始化陣列,包含 100 個桶
|
||||
private val buckets = arrayOfNulls<Pair>(100)
|
||||
|
||||
/* 雜湊函式 */
|
||||
fun hashFunc(key: Int): Int {
|
||||
val index = key % 100
|
||||
return index
|
||||
}
|
||||
|
||||
/* 查詢操作 */
|
||||
fun get(key: Int): String? {
|
||||
val index = hashFunc(key)
|
||||
val pair = buckets[index] ?: return null
|
||||
return pair._val
|
||||
}
|
||||
|
||||
/* 新增操作 */
|
||||
fun put(key: Int, _val: String) {
|
||||
val pair = Pair(key, _val)
|
||||
val index = hashFunc(key)
|
||||
buckets[index] = pair
|
||||
}
|
||||
|
||||
/* 刪除操作 */
|
||||
fun remove(key: Int) {
|
||||
val index = hashFunc(key)
|
||||
// 置為 null ,代表刪除
|
||||
buckets[index] = null
|
||||
}
|
||||
|
||||
/* 獲取所有鍵值對 */
|
||||
fun pairSet(): MutableList<Pair> {
|
||||
val pairSet = mutableListOf<Pair>()
|
||||
for (pair in buckets) {
|
||||
if (pair != null)
|
||||
pairSet.add(pair)
|
||||
}
|
||||
return pairSet
|
||||
}
|
||||
|
||||
/* 獲取所有鍵 */
|
||||
fun keySet(): MutableList<Int> {
|
||||
val keySet = mutableListOf<Int>()
|
||||
for (pair in buckets) {
|
||||
if (pair != null)
|
||||
keySet.add(pair.key)
|
||||
}
|
||||
return keySet
|
||||
}
|
||||
|
||||
/* 獲取所有值 */
|
||||
fun valueSet(): MutableList<String> {
|
||||
val valueSet = mutableListOf<String>()
|
||||
for (pair in buckets) {
|
||||
pair?.let { valueSet.add(it._val) }
|
||||
}
|
||||
return valueSet
|
||||
}
|
||||
|
||||
/* 列印雜湊表 */
|
||||
fun print() {
|
||||
for (kv in pairSet()) {
|
||||
val key = kv.key
|
||||
val _val = kv._val
|
||||
println("${key} -> ${_val}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 基於陣列實現的雜湊表 */
|
||||
class ArrayHashMap {
|
||||
// 初始化陣列,包含 100 個桶
|
||||
|
@ -1372,15 +1372,23 @@ comments: true
|
||||
=== "Kotlin"
|
||||
|
||||
```kotlin title="quick_sort.kt"
|
||||
/* 快速排序 */
|
||||
fun quickSort(nums: IntArray, left: Int, right: Int) {
|
||||
// 子陣列長度為 1 時終止遞迴
|
||||
if (left >= right) return
|
||||
// 哨兵劃分
|
||||
val pivot = partition(nums, left, right)
|
||||
// 遞迴左子陣列、右子陣列
|
||||
quickSort(nums, left, pivot - 1)
|
||||
quickSort(nums, pivot + 1, right)
|
||||
/* 快速排序(尾遞迴最佳化) */
|
||||
fun quickSortTailCall(nums: IntArray, left: Int, right: Int) {
|
||||
// 子陣列長度為 1 時終止
|
||||
var l = left
|
||||
var r = right
|
||||
while (l < r) {
|
||||
// 哨兵劃分操作
|
||||
val pivot = partition(nums, l, r)
|
||||
// 對兩個子陣列中較短的那個執行快速排序
|
||||
if (pivot - l < r - pivot) {
|
||||
quickSort(nums, l, pivot - 1) // 遞迴排序左子陣列
|
||||
l = pivot + 1 // 剩餘未排序區間為 [pivot + 1, right]
|
||||
} else {
|
||||
quickSort(nums, pivot + 1, r) // 遞迴排序右子陣列
|
||||
r = pivot - 1 // 剩餘未排序區間為 [left, pivot - 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user