代码随想录 Day34 - 贪心算法(三)

简介: 代码随想录 Day34 - 贪心算法(三)

1005. K 次取反后最大化的数组和

本题目,通过排序先找到负数,优先将负数变为正数。此时再行排序,对于剩余的 k,最多只需要让数组第一个元素变为其相反数。

package jjn.carl.greedy;
import java.util.Arrays;
import java.util.Scanner;
/**
 * @author Jjn
 * @since 2023/8/1 10:13
 */
public class LeetCode1005 {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0 && k > 0) {
                k--;
                nums[i] = -nums[i];
            } else {
                break;
            }
        }
        k = k % 2;
        Arrays.sort(nums);
        if (k > 0) {
            nums[0] = -nums[0];
        }
        int total = 0;
        for (int num : nums) {
            total += num;
        }
        return total;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int total = scanner.nextInt();
        int k = scanner.nextInt();
        int[] nums = new int[total];
        for (int i = 0; i < total; i++) {
            nums[i] = scanner.nextInt();
        }
        int largestSumAfterKNegations = new LeetCode1005().largestSumAfterKNegations(nums, k);
        System.out.println(largestSumAfterKNegations);
    }
}


134. 加油站

采用累加和的方法,若累加到一个负数,则下一位极有可能是我们想要的起始位置。

package jjn.carl.greedy;
import java.util.Scanner;
/**
 * @author Jjn
 * @since 2023/8/1 12:03
 */
public class LeetCode134 {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int totalSum = 0, currentSum = 0;
        int start = 0;
        for (int i = 0; i < gas.length; i++) {
            totalSum += (gas[i] - cost[i]);
            currentSum += (gas[i] - cost[i]);
            if (currentSum < 0) {
                currentSum = 0;
                start = i + 1;
            }
        }
        if (totalSum < 0) {
            return -1;
        }
        return start;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();
        int[] gas = new int[count];
        int[] cost = new int[count];
        for (int i = 0; i < count; i++) {
            gas[i] = scanner.nextInt();
        }
        for (int i = 0; i < count; i++) {
            cost[i] = scanner.nextInt();
        }
        int canCompleteCircuit = new LeetCode134().canCompleteCircuit(gas, cost);
        System.out.println(canCompleteCircuit);
    }
}


135. 分发糖果

一遍正序遍历,一遍反序遍历即可。

package jjn.carl.greedy;
import java.util.Arrays;
import java.util.Scanner;
/**
 * @author Jjn
 * @since 2023/8/1 12:35
 */
public class LeetCode135 {
    public int candy(int[] ratings) {
        int[] candyNum = new int[ratings.length];
        Arrays.fill(candyNum, 1);
        for (int i = 1; i < ratings.length; i++) {
            if (ratings[i] > ratings[i - 1]) {
                candyNum[i] = candyNum[i - 1] + 1;
            }
        }
        for (int i = ratings.length - 2; i >= 0; i--) {
            if (ratings[i + 1] < ratings[i]) {
                candyNum[i] = Math.max(candyNum[i], candyNum[i + 1] + 1);
            }
        }
        int total = 0;
        for (int candy : candyNum) {
            total += candy;
        }
        return total;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int total = scanner.nextInt();
        int[] ratings = new int[total];
        for (int i = 0; i < total; i++) {
            ratings[i] = scanner.nextInt();
        }
        int candy = new LeetCode135().candy(ratings);
        System.out.println(candy);
    }
}

目录
相关文章
|
29天前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
175 0
|
2月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
175 26
|
2月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
120 6
|
2月前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
29天前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
132 8
|
29天前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
142 8
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
534 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
2月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
213 14
|
2月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
185 2
|
29天前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
111 0

热门文章

最新文章