2025-01-15:实施操作可得到的最大总奖励 Ⅰ。用go说话,给定一个整数数组 rewardValues,其中包含 n 个代表奖励值的数字。
你首先时的总奖励 x 为 0,况且所有下标王人是未标志气象。你不错进行以下操作几许次:
1.从索引范围 [0, n - 1] 中聘用一个未标志的下标 i。
2.淌若 rewardValues[i] 大于面前总奖励 x,则将 rewardValues[i] 加到 x 上(即 x = x + rewardValues[i]),并将下标 i 标志为已科罚。
请筹备并复返通过最好政策大要得到的最大总奖励。
1
1
输入:rewardValues = [1,1,3,3]。
输出:4。
评释:
秩序标志下标 0 和 2,总奖励为 4,这是可得到的最大值。
谜底2025-01-15:
chatgpt[1]
题目来自leetcode3180。
大体活动如下:
1.将给定的奖励数组 rewardValues 排序,假定输入为 [1, 1, 3, 3],百家乐AG点杀排序后会酿成 [1, 1, 3, 3]。
2.运漂浮两个大整数 f0 和 f1,f0 运漂浮为 1,f1 运漂浮为 0。
3.首先遍历排序后的奖励数组 rewardValues。
4.关于每个奖励值 x,创建两个大整数 mask 和 one。mask 用来暗示面前科罚的奖励的标志位,运转为0;one 暗示1。
5.筹备面前奖励 x 对应的mask值:mask = (1
6.筹备 f1 = (f0 & mask)
7.更新 f0 = f0 | f1。
8.复返 f0 中最高位1的位置减1(即 f0.BitLen - 1)当作最大总奖励值。
总的时刻复杂度分析:
• 排序数组的时刻复杂度为O(nlogn),其中 n 为奖励数组的长度。
• 遍历奖励数组的时刻复杂度为 O(n)。
是以总的时刻复杂度为 O(nlogn)。
总的稀奇空间复杂度分析:
• 稀奇创建了一些大整数值,但这些值的个数不随输入数组大小变化,扶助空间复杂度不错忽略不计。
是以总的稀奇空间复杂度为 O(1)。
Go完好意思代码如下:
package mainimport ( "fmt" "sort" "math/big")func maxTotalReward(rewardValues []int) int { sort.Ints(rewardValues) f0, f1 := big.NewInt(1), big.NewInt(0) for _, x := range rewardValues { mask, one := big.NewInt(0), big.NewInt(1) mask.Sub(mask.Lsh(one, uint(x)), one) f1.Lsh(f1.And(f0, mask), uint(x)) f0.Or(f0, f1) } return f0.BitLen - 1}func main { rewardValues := []int{1,1,3,3} result := maxTotalReward(rewardValues) fmt.Println(result)}
在这里插入图片容貌
C完好意思代码如下:
#include #include // 函数用来相比两个整数,供 qsort 使用int compare(const void *a, const void *b) { return (*(int *)a - *(int *)b);}// 筹备最大总奖励的函数int maxTotalReward(int *rewardValues, int size) { // 排序赏赐值数组 qsort(rewardValues, size, sizeof(int), compare); unsigned long long f0 = 1; // 运转值 unsigned long long f1 = 0; // 变量 f1 // 遍历赏赐值数组 for (int i = 0; i = (1ULL
在这里插入图片容貌
C++完好意思代码如下:
#include #include #include #include int maxTotalReward(std::vector& rewardValues) { // 排序赏赐值数组 std::sort(rewardValues.begin, rewardValues.end); unsigned long long f0 = 1; // 运转值 unsigned long long f1 = 0; // 变量 f1 // 遍历赏赐值数组 for (int x : rewardValues) { unsigned long long mask = (1ULL (std::log2(f0)); // 使用 log2 筹备位长度}int main { std::vector rewardValues = {1, 1, 3, 3}; int result = maxTotalReward(rewardValues); std::cout
在这里插入图片容貌
Python完好意思代码如下:
# -*-coding:utf-8-*-import mathdef max_total_reward(reward_values): reward_values.sort f0, f1 = 1, 0 for x in reward_values: mask, one = 0, 1 mask = (one
在这里插入图片容貌
JavaScript完好意思代码如下:
function maxTotalReward(rewardValues) { rewardValues.sort((a, b) => a - b); let f0 = BigInt(1); let f1 = BigInt(0); for (let x of rewardValues) { let mask = BigInt(1)
在这里插入图片容貌
Solidity完好意思代码如下:
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;contract MaxTotalReward { function maxTotalReward(uint[] memory rewardValues) public pure returns (uint) { uint n = rewardValues.length; uint[2] memory f; f[0] = 1; f[1] = 0; for (uint i = 0; i
在这里插入图片容貌
援用流畅
[1] chatgpt: https://chatbotsplace.com/?rc=nnNWSCJ7EPag百家乐赢了100多万