2 顺序表

文章目录

    • 一、拿硬币
      • 1、题目链接
      • 2、题目简介
      • 3、涉及知识点
      • 4、分析
      • 5、完整解答
    • 二、K个元素的最大和
      • 1、题目链接
      • 2、题目简介
      • 3、涉及知识点
      • 4、分析
      • 5、完整解答
    • 三、数组元素和与数字和的绝对差
      • 1、题目链接
      • 2、题目简介
      • 3、涉及知识点
      • 4、分析
      • 5、完整解答

一、拿硬币

1、题目链接

LCP 06.拿硬币

2、题目简介

桌上有n堆力扣币,每堆的数量保存在数组coins中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

3、涉及知识点

数组、数学、贪心

4、分析

可以分为奇偶;
也可以直接每次向上取整

5、完整解答

class Solution
{
public:
    int minCount(vector<int> &coins)
    {
        int res = 0;
        for (int i = 0; i < coins.size(); i++)
        {
            res += ((coins[i] + 1) / 2);
        }
        return res;
    }
};

二、K个元素的最大和

1、题目链接

2656.K个元素的最大和

2、题目简介

给你一个下标从0开始的整数数组nums和一个整数k。你需要执行以下操作恰好k 次,最大化你的得分:

  1. 从nums中选择一个元素m。
  2. 将选中的元素m从数组中删除。
  3. 将新元素m + 1添加到数组中。
  4. 你的得分增加m。

请你返回执行以上操作恰好k次后的最大得分。

3、涉及知识点

数组、贪心

4、分析

第一次遍历选出最大的数,然后等差数列求和

5、完整解答

class Solution
{
public:
    int maximizeSum(vector<int> &nums, int k)
    {
        int res = 0;
        int maxNum = nums[0];
        for (int i = 1; i < nums.size(); i++)
        {
            if (nums[i] > maxNum)
                maxNum = nums[i];
        }
        // 等差数列求和
        res = (maxNum + maxNum + k - 1) * k / 2;
        return res;
    }
};

三、数组元素和与数字和的绝对差

1、题目链接

2535.数组元素和与数字和的绝对差

2、题目简介

给你一个正整数数组nums

  • 元素和是nums中的所有元素相加求和。
  • 数字和是nums中每一个元素的每一数位(重复数位需多次求和)相加求和。

返回元素和与数字和的绝对差。

注意:两个整数x和y的绝对差定义为Ix - yl

3、涉及知识点

数组、数学

4、分析

输入:nums = [1,15,6,3]
输出:9
解释:
nums 的元素和是 1 + 15 + 6 + 3 = 25 。
nums 的数字和是 1 + 1 + 5 + 6 + 3 = 16 。
元素和与数字和的绝对差是 |25 - 16| = 9 。

5、完整解答

class Solution
{
public:
    int differenceOfSum(vector<int> &nums)
    {
        int sum1 = 0;
        int sum2 = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            sum1 += nums[i];
            while (nums[i])
            {
                sum2 += (nums[i] % 10);
                nums[i] /= 10;
            }
        }
        return abs(sum1 - sum2);
    }
};

你可能感兴趣的:(笔试强训,leetcode,算法,数据结构)