构成特定和需要添加的最少元素 - 贪心算法

5698. 构成特定和需要添加的最少元素

文章目录

  • 5698. 构成特定和需要添加的最少元素
  • 前言
  • 题目描述:
  • 一、解题关键
  • 一、我的答案
    • 1.1 注意内容:
    • 1.2 思路


前言

提示:leetcode做题一定要看清楚题目,如果不懂题目可以去评论区看看大家对题目的理解。
忌讳:不懂题目的意思就答题


题目描述:

构成特定和需要添加的最少元素 - 贪心算法_第1张图片

一、解题关键

贪心算法,查看题目是否可以用贪心算法。初期可以查看这几个关键词:“最少”,“最多”,“最大”,“最小”…
"最"关键字一般都可以用贪心
后期题目做多了,自然水到渠成一眼救能看出,使用什么算法

一、我的答案

时间复杂度: O(1) ,空间复杂度: O(1)

1.1 注意内容:

  1. 题目描述中给的负数是障眼法,直接取其绝对值就好。
  2. 因为num[i] <=106 && num.length <= 105,所以计算时需要使用long,使用int会缺失精度

1.2 思路

因为题目是要给数组添加最少的元素,使其等于goal值。而添加的值的绝对值要小于 limit。根据者两点,我们可以得出不用去考虑,添加什么值。只要考虑在数组中添加的limit个数(因为添加的数越大,则加入数组的数字最少)

public int minElements(int[] nums, int limit, int goal) {
		// 计算nums的和
        long sum=0;
        for (int num:nums){
            sum+=num;
        }
        // 计算还需要添加的值,才能等于 goal
        long value = Math.abs(goal - sum);
        // 使用还需要添加的值 除以 limit得出,在数组中添加的最少元素个数
        int count = (int)((value) / (limit)); // 能整除,在数组添加的个数就是 count
        if ((value % limit) != 0) {
        // 不能整除,还需要在数组中添加一个数才能等于 goal
            count++;
        }
        return count;
    }

PS: 题目做多了,自然水到渠成一眼救能看出,使用什么算法

你可能感兴趣的:(算法,算法,leetcode,java,贪心算法)