(LeetCode 每日一题)2829. k-avoiding 数组的最小总和(贪心)

题目:2829. k-avoiding 数组的最小总和

(LeetCode 每日一题)2829. k-avoiding 数组的最小总和(贪心)_第1张图片

思路:从1开始枚举,因为小的数优先插入,枚举到i时,k-i肯定不能要。

C++版本:

class Solution {
public:
    int minimumSum(int n, int k) {
        int sum=0; 
        //记录不能选和已经选过的数
        unordered_set<int> sta;
        //从1开始枚举
        int i=1;
        //得选n个数
        while(n){
            if(sta.find(i)==sta.end()){
                sum+=i;
                n--;
                sta.insert(i);
                if(i<k)sta.insert(k-i);
            }
            i++;
        }
        return sum;
    }
};

JAVA版本:

class Solution {
    public int minimumSum(int n, int k) {
        int sum=0; 
        Set<Integer> sta=new HashSet<>();
        int i=1;
        while(n!=0){
            if(!sta.contains(i)){
                sum+=i;
                n--;
                sta.add(i);
                if(i<k)sta.add(k-i);
            }
            i++;
        }
        return sum;
    }
}

你可能感兴趣的:(LeetCode,java版刷题,leetcode,算法,职场和发展,java,c++)