【无标题】

时间:2024-10-27 15:31:23
import java.math.BigInteger; class Solution { public int maxTotalReward(int[] rewardValues) { Set<Integer> set = new HashSet<>(); int mx = 0; for(int x : rewardValues){ set.add(x); mx = Math.max(mx, x); } if(set.contains(mx - 1)) return mx * 2 - 1; // 使用bitset优化,去除第一维维度 // 使用二进制保存状态,定义第j位为1表示f[j]=true int[] nums = Arrays.stream(rewardValues).distinct().sorted().toArray(); BigInteger f = BigInteger.ONE; for (int v : nums) { BigInteger mask = BigInteger.ONE.shiftLeft(v).subtract(BigInteger.ONE); BigInteger shiftLeft = f.and(mask).shiftLeft(v); f = f.or(shiftLeft); } return f.bitLength() - 1; } }