首页 > 编程语言 >代码随想录算法训练营第第35天 | 977.有序数组的平方1005.K次取反后最大化的数组和 、134. 加油站、135. 分发糖果

代码随想录算法训练营第第35天 | 977.有序数组的平方1005.K次取反后最大化的数组和 、134. 加油站、135. 分发糖果

时间:2024-06-11 23:11:44浏览次数:11  
标签:nums 随想录 取反 candy number let param 数组 total

1005.K次取反后最大化的数组和
本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。
https://programmercarl.com/1005.K次取反后最大化的数组和.html

自己写的时间复杂度太高,看答案优化
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var largestSumAfterKNegations = function(nums, k) {
    while(k>0){
        let min = Infinity;
        let index = 0;
        for (let i=0;i<nums.length;i++) {
            if (min>nums[i]) {
                min = nums[i];
                index = i;
            }
        }
        nums[index] = -nums[index];
        k--;
    }
    let total = nums.reduce((total, cur)=>{
        return total += cur;
    }, 0)
    return total;
};
  1. 加油站
    本题有点难度,不太好想,推荐大家熟悉一下方法二
    https://programmercarl.com/0134.加油站.html
基本上想不出
/**
 * @param {number[]} gas
 * @param {number[]} cost
 * @return {number}
 */
var canCompleteCircuit = function(gas, cost) {
    let total = 0;
    let curSum = 0;
    let start = 0;
    for (let i=0;i<gas.length;i++) {
        curSum += gas[i] - cost[i];
        total += gas[i] - cost[i];
        if (curSum < 0) {
            start = i + 1;
            curSum = 0;
        }
    }
    if (total<0) return -1;
    return start;
};
  1. 分发糖果
    本题涉及到一个思想,就是想处理好一边再处理另一边,不要两边想着一起兼顾,后面还会有题目用到这个思路
    https://programmercarl.com/0135.分发糖果.html
/**
 * @param {number[]} ratings
 * @return {number}
 */
var candy = function(ratings) {
    let len = ratings.length;
    let candy = new Array(len).fill(1);

    for (let i=1;i<len;i++) {
        if (ratings[i]>ratings[i-1]) {
            candy[i] = candy[i-1]+1;
        }
    }

    for (let i=len-2;i>=0;i--) {
        if (ratings[i]>ratings[i+1]) {
            candy[i] = Math.max(candy[i+1]+1, candy[i]);
        }
    }

    let total = 0;
    for (let i=0;i<len;i++) {
        total += candy[i];
    }
    return total;
};

标签:nums,随想录,取反,candy,number,let,param,数组,total
From: https://www.cnblogs.com/yuanyf6/p/18242981

相关文章

  • 力控算法每日一练:209. 长度最小的子数组(java)
    给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。classSolution{publicintminSubArrayL......
  • 代码随想录 算法训练营 d6 哈希表 Leetcode242 有效的字母异位词 Leetcode349 两个数
    哈希表很重要哈希表哈希表场景一般哈希表都是用来快速判断一个元素是否出现集合里一般来说数组模拟哈希set 哈希map不同的场景 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,se......
  • CH05_数组
    CH05_数组概述定义:一组相同类型的数据的集合。描述:1.数组中的每个元素都是相同的数据类型2.数组是由连续的内存位置组成的。3.数组索引是从0开始一维数组语法:1.数据类型数组名[长度];2.数据类型数组名[长度]={值1,值2,值3...};3.数据类型数组名[]={值1,值2,值3...};示......
  • 基本数据类型 String,null 和 undefined,运算符,流程控制,JavaScript之数组,数组常用
    Ⅰ基本数据类型String【一】String类型String类型就是字符串类型【二】定义变量【1】常规变量var变量名="变量值";//一般用这种var变量名='变量值';不支持三引号【2】可以先声明不赋值先用varb;再对变量b赋值varb='6';【三】字符串的格式化输出语法......
  • C#——动态数组ArrayList
    动态数组动态数组:ArrayList,代表了可被单独索引的对象的有序集合,可以代替一个数组Array,动态数组可以使用索引在指定的位置添加或者删除元素,动态数组自动重新调整数组的大小声明声明方式1:不带参数初始数组 ArrayLista1=newArrayList();声明方式2:初始化的带上数......
  • 0080-删除有序数组中的重复项II
    80.删除有序数组中的重复项II给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回数值是整数,但输出......
  • LeetCode 419. 甲板上的战舰(深度优先搜索dfs、数组)
    419.甲板上的战舰思路:方法一,深度优先搜索dfs,遇到‘X’,就dfs一次,并在board中将其变为‘.’。classSolution{public:voiddfs(intx,inty,vector<vector<char>>&board){if(board[x][y]!='X')return;board[x][y]='.';if(x+1......
  • 算法课程笔记——树状数组基础
    算法课程笔记——树状数组基础如果不这样写会一直循环出错......
  • 0026-删除有序数组中的重复项
    26.删除有序数组中的重复项给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题......
  • 代码随想录算法训练营第9天 |
    28.strStr()https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/实现strStr()代码随想录https://programmercarl.com/0028.实现strStr.html#思路459.重复字符串https://leetcode.cn/problems/repeated-substring-pattern/submis......