最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

2023-07-23:給你 n 個(gè)任務(wù)和 m 個(gè)工人 每個(gè)任務(wù)需要一定的力量值才能完成 需要的力量

2023-07-23 22:37 作者:福大大架構(gòu)師每日一題  | 我要投稿

2023-07-23:給你 n 個(gè)任務(wù)和 m 個(gè)工人

每個(gè)任務(wù)需要一定的力量值才能完成

需要的力量值保存在下標(biāo)從 0 開始的整數(shù)數(shù)組 tasks 中

第 i 個(gè)任務(wù)需要 tasks[i] 的力量才能完成

每個(gè)工人的力量值保存在下標(biāo)從 0 開始的整數(shù)數(shù)組 workers 中

第 j 個(gè)工人的力量值為 workers[j]

每個(gè)工人只能完成 一個(gè) 任務(wù)

且力量值需要 大于等于 該任務(wù)的力量要求值, 即 workers[j] >= tasks[i]

除此以外,你還有 pills 個(gè)神奇藥丸

可以給 一個(gè)工人的力量值 增加 strength

你可以決定給哪些工人使用藥丸

但每個(gè)工人 最多 只能使用 一片 藥丸。

給你下標(biāo)從 0 開始的整數(shù)數(shù)組tasks 和 workers 以及

兩個(gè)整數(shù) pills 和 strength ,請(qǐng)你返回 最多 有多少個(gè)任務(wù)可以被完成。

來自華為。

輸入:tasks = [3,2,1], workers = [0,3,3], pills = 1, strength = 1。

輸出:3。

答案2023-07-23:

maxTaskAssign1:

1.對(duì)任務(wù)數(shù)組 tasks 和工人數(shù)組 workers 進(jìn)行升序排序。

2.使用二分查找在任務(wù)數(shù)組 tasks 中找到一個(gè)索引 m,使得從 tasks[0] 到 tasks[m-1] 的任務(wù)可以被 workers[len(workers)-m] 到 workers[len(workers)-1] 完成。

3.判斷使用藥丸后,從 tasks[m] 到 tasks[len(tasks)-1] 的剩余任務(wù)是否能夠被剩余的工人完成。

4.如果可以完成,則繼續(xù)在右半部分尋找更大的 m 值;如果無法完成,則在左半部分尋找更小的 m 值。

5.返回最終的 m 值,即最多可以完成的任務(wù)數(shù)。

maxTaskAssign2:

1.對(duì)任務(wù)數(shù)組 tasks 和工人數(shù)組 workers 進(jìn)行升序排序。

2.使用二分查找在任務(wù)數(shù)組 tasks 中找到一個(gè)索引 m,使得從 tasks[0] 到 tasks[m-1] 的任務(wù)可以被 workers[len(workers)-m] 到 workers[len(workers)-1] 完成。

3.使用輔助數(shù)組 help 存儲(chǔ)滿足條件的任務(wù)索引。

4.從 workers[wl] 到 workers[wr] 遍歷每個(gè)工人,依次分配任務(wù)。

5.在任務(wù)數(shù)組 tasks 中,使用雙指針 l 和 r,將滿足 workers[wi] <= tasks[help[l]] <= workers[wi]+strength 的任務(wù)指針存入 help 數(shù)組。

6.如果 l < r,則說明有任務(wù)可以被工人完成,將任務(wù)數(shù)加一,并將 r 減一。

7.如果 l >= r,則說明無法完成任務(wù),返回一個(gè)很大的值。

8.返回最終的任務(wù)數(shù)。

算法maxTaskAssign1的時(shí)間復(fù)雜度為O(n log n + m log m),空間復(fù)雜度為O(n + m)。

算法maxTaskAssign2的時(shí)間復(fù)雜度為O((n + m) log n),空間復(fù)雜度為O(n)。

go完整代碼如下:

package?main

import?(
????"fmt"
????"sort"
)

func?maxTaskAssign1(tasks?[]int,?workers?[]int,?pills?int,?strength?int)?int?{
????l?:=?0
????r?:=?len(tasks)
????var?m,?ans?int
????sort.Ints(tasks)
????sort.Ints(workers)
????for?l?<=?r?{
????????m?=?(l?+?r)?/?2
????????if?yeah1(tasks,?0,?m-1,?workers,?len(workers)-m,?len(workers)-1,?strength)?<=?pills?{
????????????ans?=?m
????????????l?=?m?+?1
????????}?else?{
????????????r?=?m?-?1
????????}
????}
????return?ans
}

func?yeah1(tasks?[]int,?tl?int,?tr?int,?workers?[]int,?wl?int,?wr?int,?strength?int)?int?{
????if?wl?<?0?{
????????return?int(^uint(0)?>>?1)
????}
????taskMap?:=?make(map[int]int)
????for?i?:=?tl;?i?<=?tr;?i++?{
????????taskMap[tasks[i]]++
????}
????var?ans?int
????for?i?:=?wl;?i?<=?wr;?i++?{
????????job?:=?floorKey(taskMap,?workers[i])
????????if?job?!=?nil?{
????????????times?:=?taskMap[*job]
????????????if?times?==?1?{
????????????????delete(taskMap,?*job)
????????????}?else?{
????????????????taskMap[*job]--
????????????}
????????}?else?{
????????????job?=?floorKey(taskMap,?workers[i]+strength)
????????????if?job?==?nil?{
????????????????return?int(^uint(0)?>>?1)
????????????}
????????????ans++
????????????times?:=?taskMap[*job]
????????????if?times?==?1?{
????????????????delete(taskMap,?*job)
????????????}?else?{
????????????????taskMap[*job]--
????????????}
????????}
????}
????return?ans
}

func?floorKey(taskMap?map[int]int,?key?int)?*int?{
????floorKey?:=?-1
????for?k?:=?range?taskMap?{
????????if?k?>?floorKey?&&?k?<=?key?{
????????????floorKey?=?k
????????}
????}
????if?floorKey?==?-1?{
????????return?nil
????}
????return?&floorKey
}

func?maxTaskAssign2(tasks?[]int,?workers?[]int,?pills?int,?strength?int)?int?{
????help?:=?make([]int,?len(tasks))
????l?:=?0
????r?:=?len(tasks)
????var?m,?ans?int
????sort.Ints(tasks)
????sort.Ints(workers)
????for?l?<=?r?{
????????m?=?(l?+?r)?/?2
????????if?yeah2(tasks,?0,?m-1,?workers,?len(workers)-m,?len(workers)-1,?strength,?help)?<=?pills?{
????????????ans?=?m
????????????l?=?m?+?1
????????}?else?{
????????????r?=?m?-?1
????????}
????}
????return?ans
}

func?yeah2(tasks?[]int,?tl?int,?tr?int,?workers?[]int,?wl?int,?wr?int,?strength?int,?help?[]int)?int?{
????if?wl?<?0?{
????????return?int(^uint(0)?>>?1)
????}
????l?:=?0
????r?:=?0
????ti?:=?tl
????var?ans?int
????for?wi?:=?wl;?wi?<=?wr;?wi++?{
????????for?;?ti?<=?tr?&&?tasks[ti]?<=?workers[wi];?ti++?{
????????????help[r]?=?ti
????????????r++
????????}
????????if?l?<?r?&&?tasks[help[l]]?<=?workers[wi]?{
????????????l++
????????}?else?{
????????????for?;?ti?<=?tr?&&?tasks[ti]?<=?workers[wi]+strength;?ti++?{
????????????????help[r]?=?ti
????????????????r++
????????????}
????????????if?l?<?r?{
????????????????ans++
????????????????r--
????????????}?else?{
????????????????return?int(^uint(0)?>>?1)
????????????}
????????}
????}
????return?ans
}

func?main()?{
????tasks?:=?[]int{3,?2,?1}
????workers?:=?[]int{0,?3,?3}
????pills?:=?1
????strength?:=?1

????fmt.Println("maxTaskAssign1:",?maxTaskAssign1(tasks,?workers,?pills,?strength))
????fmt.Println("maxTaskAssign2:",?maxTaskAssign2(tasks,?workers,?pills,?strength))
}

在這里插入圖片描述

rust完整代碼如下:

use?std::collections::BTreeMap;

fn?max_task_assign1(tasks:?Vec<i32>,?workers:?Vec<i32>,?pills:?i32,?strength:?i32)?->?i32?{
????let?mut?l?=?0;
????let?mut?r?=?tasks.len();
????let?mut?ans?=?0;
????let?mut?sorted_tasks?=?tasks.clone();
????sorted_tasks.sort();
????let?mut?sorted_workers?=?workers.clone();
????sorted_workers.sort();

????while?l?<=?r?{
????????let?m?=?(l?+?r)?/?2;
????????if?yeah1(
????????????&sorted_tasks,
????????????0,
????????????m?-?1,
????????????&sorted_workers,
????????????workers.len()?-?m,
????????????workers.len()?-?1,
????????????strength,
????????)?<=?pills
????????{
????????????ans?=?m?as?i32;
????????????l?=?m?+?1;
????????}?else?{
????????????r?=?m?-?1;
????????}
????}

????ans
}

fn?yeah1(
????tasks:?&[i32],
????tl:?usize,
????tr:?usize,
????workers:?&[i32],
????wl:?usize,
????wr:?usize,
????strength:?i32,
)?->?i32?{
????if?wl?>=?workers.len()?{
????????return?i32::max_value();
????}

????let?mut?task_map?=?BTreeMap::new();
????for?i?in?tl..=tr?{
????????*task_map.entry(tasks[i]).or_insert(0)?+=?1;
????}

????let?mut?ans?=?0;
????for?i?in?wl..=wr?{
????????let?job?=?match?task_map.range(..=workers[i]).rev().next()?{
????????????Some((key,?_))?=>?*key,
????????????None?=>?{
????????????????let?job?=?match?task_map.range(..=(workers[i]?+?strength)).rev().next()?{
????????????????????Some((key,?_))?=>?*key,
????????????????????None?=>?return?i32::max_value(),
????????????????};
????????????????ans?+=?1;
????????????????job
????????????}
????????};
????????let?times?=?task_map.get(&job).cloned().unwrap();
????????if?times?==?1?{
????????????task_map.remove(&job);
????????}?else?{
????????????task_map.insert(job,?times?-?1);
????????}
????}

????ans
}

fn?max_task_assign2(tasks:?Vec<i32>,?workers:?Vec<i32>,?pills:?i32,?strength:?i32)?->?i32?{
????let?mut?help?=?vec![0;?tasks.len()];
????let?mut?l?=?0;
????let?mut?r?=?tasks.len();
????let?mut?ans?=?0;
????let?mut?sorted_tasks?=?tasks.clone();
????sorted_tasks.sort();
????let?mut?sorted_workers?=?workers.clone();
????sorted_workers.sort();

????while?l?<=?r?{
????????let?m?=?(l?+?r)?/?2;
????????if?yeah2(
????????????&sorted_tasks,
????????????0,
????????????m?-?1,
????????????&sorted_workers,
????????????workers.len()?-?m,
????????????workers.len()?-?1,
????????????strength,
????????????&mut?help,
????????)?<=?pills
????????{
????????????ans?=?m?as?i32;
????????????l?=?m?+?1;
????????}?else?{
????????????r?=?m?-?1;
????????}
????}

????ans
}

fn?yeah2(
????tasks:?&[i32],
????tl:?usize,
????tr:?usize,
????workers:?&[i32],
????wl:?usize,
????wr:?usize,
????strength:?i32,
????help:?&mut?[i32],
)?->?i32?{
????if?wl?>=?workers.len()?{
????????return?i32::max_value();
????}

????let?mut?l?=?0;
????let?mut?r?=?0;
????let?mut?ti?=?tl;
????let?mut?ans?=?0;

????for?wi?in?wl..=wr?{
????????while?ti?<=?tr?&&?tasks[ti]?<=?workers[wi]?{
????????????help[r]?=?ti?as?i32;
????????????r?+=?1;
????????????ti?+=?1;
????????}

????????if?l?<?r?&&?tasks[help[l?as?usize]?as?usize]?<=?workers[wi]?{
????????????l?+=?1;
????????}?else?{
????????????while?ti?<=?tr?&&?tasks[ti]?<=?workers[wi]?+?strength?{
????????????????help[r]?=?ti?as?i32;
????????????????r?+=?1;
????????????????ti?+=?1;
????????????}

????????????if?l?<?r?{
????????????????ans?+=?1;
????????????????r?-=?1;
????????????}?else?{
????????????????return?i32::max_value();
????????????}
????????}
????}

????ans
}

fn?main()?{
????let?tasks?=?vec![3,?2,?1];
????let?workers?=?vec![0,?3,?3];
????let?pills?=?1;
????let?strength?=?1;

????let?result1?=?max_task_assign1(tasks.clone(),?workers.clone(),?pills,?strength);
????let?result2?=?max_task_assign2(tasks,?workers,?pills,?strength);

????println!("max_task_assign1?result:?{}",?result1);
????println!("max_task_assign2?result:?{}",?result2);
}

在這里插入圖片描述

c++代碼如下:

#include?<iostream>
#include?<vector>
#include?<algorithm>
#include?<map>

using?namespace?std;

int?yeah1(vector<int>&?tasks,?int?tl,?int?tr,?vector<int>&?workers,?int?wl,?int?wr,?int?strength)?{
????if?(wl?<?0)?{
????????return?INT_MAX;
????}
????map<int,?int>?taskMap;
????for?(int?i?=?tl;?i?<=?tr;?i++)?{
????????taskMap[tasks[i]]++;
????}
????int?ans?=?0;
????for?(int?i?=?wl;?i?<=?wr;?i++)?{
????????auto?job?=?taskMap.lower_bound(workers[i]);
????????if?(job?!=?taskMap.end())?{
????????????int?times?=?job->second;
????????????if?(times?==?1)?{
????????????????taskMap.erase(job);
????????????}
????????????else?{
????????????????job->second--;
????????????}
????????}
????????else?{
????????????job?=?taskMap.lower_bound(workers[i]?+?strength);
????????????if?(job?==?taskMap.end())?{
????????????????return?INT_MAX;
????????????}
????????????ans++;
????????????int?times?=?job->second;
????????????if?(times?==?1)?{
????????????????taskMap.erase(job);
????????????}
????????????else?{
????????????????job->second--;
????????????}
????????}
????}
????return?ans;
}

int?maxTaskAssign1(vector<int>&?tasks,?vector<int>&?workers,?int?pills,?int?strength)?{
????int?l?=?0;
????int?r?=?tasks.size();
????int?m,?ans?=?0;
????sort(tasks.begin(),?tasks.end());
????sort(workers.begin(),?workers.end());
????while?(l?<=?r)?{
????????m?=?(l?+?r)?/?2;
????????if?(yeah1(tasks,?0,?m?-?1,?workers,?workers.size()?-?m,?workers.size()?-?1,?strength)?<=?pills)?{
????????????ans?=?m;
????????????l?=?m?+?1;
????????}
????????else?{
????????????r?=?m?-?1;
????????}
????}
????return?ans;
}

int?yeah2(vector<int>&?tasks,?int?tl,?int?tr,?vector<int>&?workers,?int?wl,?int?wr,?int?strength,?vector<int>&?help)?{
????if?(wl?<?0)?{
????????return?INT_MAX;
????}
????int?l?=?0;
????int?r?=?0;
????int?ti?=?tl;
????int?ans?=?0;
????for?(int?wi?=?wl;?wi?<=?wr;?wi++)?{
????????for?(;?ti?<=?tr?&&?tasks[ti]?<=?workers[wi];?ti++)?{
????????????help[r++]?=?ti;
????????}
????????if?(l?<?r?&&?tasks[help[l]]?<=?workers[wi])?{
????????????l++;
????????}
????????else?{
????????????for?(;?ti?<=?tr?&&?tasks[ti]?<=?workers[wi]?+?strength;?ti++)?{
????????????????help[r++]?=?ti;
????????????}
????????????if?(l?<?r)?{
????????????????ans++;
????????????????r--;
????????????}
????????????else?{
????????????????return?INT_MAX;
????????????}
????????}
????}
????return?ans;
}

int?maxTaskAssign2(vector<int>&?tasks,?vector<int>&?workers,?int?pills,?int?strength)?{
????vector<int>?help(tasks.size());
????int?l?=?0;
????int?r?=?tasks.size();
????int?m,?ans?=?0;
????sort(tasks.begin(),?tasks.end());
????sort(workers.begin(),?workers.end());
????while?(l?<=?r)?{
????????m?=?(l?+?r)?/?2;
????????if?(yeah2(tasks,?0,?m?-?1,?workers,?workers.size()?-?m,?workers.size()?-?1,?strength,?help)?<=?pills)?{
????????????ans?=?m;
????????????l?=?m?+?1;
????????}
????????else?{
????????????r?=?m?-?1;
????????}
????}
????return?ans;
}

int?main()?{
????vector<int>?tasks?=?{?3,?2,?1?};
????vector<int>?workers?=?{?0,?3,?3?};
????int?pills?=?1;
????int?strength?=?1;

????//int?result1?=?maxTaskAssign1(tasks,?workers,?pills,?strength);
????int?result2?=?maxTaskAssign2(tasks,?workers,?pills,?strength);

????//cout?<<?"Result?from?maxTaskAssign1:?"?<<?result1?<<?endl;
????cout?<<?"Result?from?maxTaskAssign2:?"?<<?result2?<<?endl;

????return?0;
}

在這里插入圖片描述

c完整代碼如下:

#include?<stdio.h>
#include?<stdlib.h>

int?yeah1(int*?tasks,?int?tl,?int?tr,?int*?workers,?int?wl,?int?wr,?int?strength)?{
????if?(wl?<?0)?{
????????return?INT_MAX;
????}
????int?taskMap[1001]?=?{?0?};

????for?(int?i?=?tl;?i?<=?tr;?i++)?{
????????taskMap[tasks[i]]++;
????}

????int?ans?=?0;

????for?(int?i?=?wl;?i?<=?wr;?i++)?{
????????int?job?=?-1;

????????for?(int?j?=?workers[i];?j?>=?0;?j--)?{
????????????if?(taskMap[j]?>?0)?{
????????????????job?=?j;
????????????????break;
????????????}
????????}

????????if?(job?!=?-1)?{
????????????taskMap[job]--;
????????}
????????else?{
????????????job?=?-1;

????????????for?(int?j?=?workers[i]?+?strength;?j?>=?workers[i];?j--)?{
????????????????if?(taskMap[j]?>?0)?{
????????????????????job?=?j;
????????????????????break;
????????????????}
????????????}

????????????if?(job?==?-1)?{
????????????????return?INT_MAX;
????????????}

????????????ans++;
????????????taskMap[job]--;
????????}
????}

????return?ans;
}

int?compare(const?void*?a,?const?void*?b)?{
????return?*(int*)a?-?*(int*)b;
}

int?maxTaskAssign1(int*?tasks,?int?tasksSize,?int*?workers,?int?workersSize,?int?pills,?int?strength)?{
????int?l?=?0;
????int?r?=?tasksSize;
????int?m,?ans?=?0;
????int*?sortedTasks?=?(int*)malloc(tasksSize?*?sizeof(int));
????int*?sortedWorkers?=?(int*)malloc(workersSize?*?sizeof(int));

????for?(int?i?=?0;?i?<?tasksSize;?i++)?{
????????sortedTasks[i]?=?tasks[i];
????}

????for?(int?i?=?0;?i?<?workersSize;?i++)?{
????????sortedWorkers[i]?=?workers[i];
????}

????qsort(sortedTasks,?tasksSize,?sizeof(int),?compare);
????qsort(sortedWorkers,?workersSize,?sizeof(int),?compare);

????while?(l?<=?r)?{
????????m?=?(l?+?r)?/?2;

????????if?(yeah1(sortedTasks,?0,?m?-?1,?sortedWorkers,?workersSize?-?m,?workersSize?-?1,?strength)?<=?pills)?{
????????????ans?=?m;
????????????l?=?m?+?1;
????????}
????????else?{
????????????r?=?m?-?1;
????????}
????}

????free(sortedTasks);
????free(sortedWorkers);

????return?ans;
}

int?yeah2(int*?tasks,?int?tl,?int?tr,?int*?workers,?int?wl,?int?wr,?int?strength,?int*?help)?{
????if?(wl?<?0)?{
????????return?INT_MAX;
????}

????int?l?=?0;
????int?r?=?0;
????int?ti?=?tl;
????int?ans?=?0;

????for?(int?wi?=?wl;?wi?<=?wr;?wi++)?{
????????for?(;?ti?<=?tr?&&?tasks[ti]?<=?workers[wi];?ti++)?{
????????????help[r++]?=?ti;
????????}

????????if?(l?<?r?&&?tasks[help[l]]?<=?workers[wi])?{
????????????l++;
????????}
????????else?{
????????????for?(;?ti?<=?tr?&&?tasks[ti]?<=?workers[wi]?+?strength;?ti++)?{
????????????????help[r++]?=?ti;
????????????}

????????????if?(l?<?r)?{
????????????????ans++;
????????????????r--;
????????????}
????????????else?{
????????????????return?INT_MAX;
????????????}
????????}
????}

????return?ans;
}

int?maxTaskAssign2(int*?tasks,?int?tasksSize,?int*?workers,?int?workersSize,?int?pills,?int?strength)?{
????int*?help?=?(int*)malloc(tasksSize?*?sizeof(int));
????int?l?=?0;
????int?r?=?tasksSize;
????int?m,?ans?=?0;
????int*?sortedTasks?=?(int*)malloc(tasksSize?*?sizeof(int));
????int*?sortedWorkers?=?(int*)malloc(workersSize?*?sizeof(int));

????for?(int?i?=?0;?i?<?tasksSize;?i++)?{
????????sortedTasks[i]?=?tasks[i];
????}

????for?(int?i?=?0;?i?<?workersSize;?i++)?{
????????sortedWorkers[i]?=?workers[i];
????}

????qsort(sortedTasks,?tasksSize,?sizeof(int),?compare);
????qsort(sortedWorkers,?workersSize,?sizeof(int),?compare);

????while?(l?<=?r)?{
????????m?=?(l?+?r)?/?2;

????????if?(yeah2(sortedTasks,?0,?m?-?1,?sortedWorkers,?workersSize?-?m,?workersSize?-?1,?strength,?help)?<=?pills)?{
????????????ans?=?m;
????????????l?=?m?+?1;
????????}
????????else?{
????????????r?=?m?-?1;
????????}
????}

????free(help);
????free(sortedTasks);
????free(sortedWorkers);

????return?ans;
}

int?main()?{
????int?tasks[]?=?{?3,?2,?1?};
????int?tasksSize?=?sizeof(tasks)?/?sizeof(tasks[0]);
????int?workers[]?=?{?0,?3,?3?};
????int?workersSize?=?sizeof(workers)?/?sizeof(workers[0]);
????int?pills?=?1;
????int?strength?=?1;

????int?max1?=?maxTaskAssign1(tasks,?tasksSize,?workers,?workersSize,?pills,?strength);
????int?max2?=?maxTaskAssign2(tasks,?tasksSize,?workers,?workersSize,?pills,?strength);

????printf("maxTaskAssign1:?%d\n",?max1);
????printf("maxTaskAssign2:?%d\n",?max2);

????return?0;
}

在這里插入圖片描述


2023-07-23:給你 n 個(gè)任務(wù)和 m 個(gè)工人 每個(gè)任務(wù)需要一定的力量值才能完成 需要的力量的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
平武县| 山西省| 湘潭市| 南康市| 柘城县| 黄石市| 岳阳县| 江永县| 纳雍县| 正宁县| 宝鸡市| 甘泉县| 凤冈县| 荔浦县| 古浪县| 贵州省| 鄂州市| 龙井市| 河北省| 鄯善县| 南澳县| 龙游县| 罗城| 丹棱县| 茌平县| 手游| 大方县| 汶上县| 龙江县| 利辛县| 玛沁县| 池州市| 平和县| 聂拉木县| 湘阴县| 金堂县| 东丰县| 佛冈县| 玉田县| 夏津县| 荔波县|