基础数据结构第03天:顺序表(实战篇)

目录

求奇数的乘积

数值统计

青年歌手大奖赛_评委会打分

猜数字

拿硬币

值相等的最小索引

最大连续1的个数

差的绝对值为K的数对数目

数组中两元素的最大乘积

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

K个元素的最大和

等差三元组的数目

移除元素

基于排列构建数组

数组串联


求奇数的乘积

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
    int t;
    while (cin >> t)
    {
        int s = 1;
        int k;
        while (t--)
        {
            cin >> k;
            if (k % 2)
            {
                s *= k;
            }
        }
        cout << s << endl;
    }
    return 0;
}

数值统计

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
    int t;
    while (cin >> t)
    {
        if (t == 0)
        {
            break;
        }
        int a = 0;
        int b = 0;
        int c = 0;
        double k;
        while (t--)
        {
            cin >> k;
            if (k < 0)
            {
                a++;
            }
            else if (k > 0)
            {
                c++;
            }
            else
            {
                b++;
            }
        }
        cout << a << " " << b << " " << c << endl;
    }
    return 0;
}

青年歌手大奖赛_评委会打分

cpp 复制代码
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int k;
    while (cin >> k)
    {
        double s = 0;
        double MAX = 0;
        double MIN = 100;
        double t;
        int p = k;
        while (p--)
        {
            cin >> t;
            s += t;
            MAX = max(MAX, t);
            MIN = min(MIN, t);
        }
        s = s - MAX - MIN;
        s = s / (k - 2);
        printf("%.2llf\n", s);
    }
    return 0;
}

猜数字

cpp 复制代码
class Solution {
public:
    int game(vector<int>& guess, vector<int>& answer) {
        int res = 0;
        for (int i = 0; i < 3; i++) {
            if (guess[i] == answer[i])
                res++;
        }
        return res;
    }
};

拿硬币

cpp 复制代码
class Solution {
public:
    int minCount(vector<int>& coins) {
        int res=0;
        for(int i=0;i<coins.size();i++){
            if(coins[i]%2==1){
                res++;
                coins[i]--;
            }
            res+=coins[i]/2;
        }
        return res;
    }
};

值相等的最小索引

cpp 复制代码
class Solution {
public:
    int smallestEqual(vector<int>& nums) {
        for(int i=0;i<nums.size();i++){
            if(i%10==nums[i]){
                return i;
            }
        }
        return -1;
    }
};

最大连续1的个数

cpp 复制代码
class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
        int res = 0;
        int sum = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] == 1) {
                sum++;
                res = max(res, sum);
            } else {
                sum = 0;
            }
        }
        return res;
    }
};

差的绝对值为K的数对数目

cpp 复制代码
class Solution
{
public:
    int countKDifference(vector<int> &nums, int k)
    {
        int res = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            for (int j = i + 1; j < nums.size(); j++)
            {
                if (abs(nums[i] - nums[j]) == k)
                    res++;
            }
        }
        return res;
    }
};

数组中两元素的最大乘积

cpp 复制代码
class Solution {
public:
    int maxProduct(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        return (nums[nums.size()-1]-1)*(nums[nums.size()-2]-1);
    }
};

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

cpp 复制代码
class Solution {
public:
    int differenceOfSum(vector<int>& nums) {
        int yuansu=0;
        int shuwei=0;
        for(int i=0;i<nums.size();i++){
            yuansu+=nums[i];
            while(nums[i]){
                shuwei+=nums[i]%10;
                nums[i]/=10;
            }
        }
        return abs(yuansu-shuwei);
    }
};

K个元素的最大和

cpp 复制代码
class Solution {
public:
    int maximizeSum(vector<int>& nums, int k) {
        int res=0;
        int m=nums[0];
        for(int i=0;i<nums.size();i++){
            m=max(m,nums[i]);
        }
        for(int i=0;i<k;i++){
            res=res+m+i;
        }
        return res;
    }
};

等差三元组的数目

cpp 复制代码
class Solution {
public:
    int arithmeticTriplets(vector<int>& nums, int diff) {
        int res=0;
        for(int i=0;i<nums.size();i++){
            for(int j=i+1;j<nums.size();j++){
                if(nums[j]-nums[i]==diff){
                    for(int k=j+1;k<nums.size();k++){
                        if(nums[k]-nums[j]==diff){
                            res++;
                        }
                    }
                }
            }
        }
        return res;
    }
};

移除元素

快慢双指针

cpp 复制代码
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slow = 0;
        for (int fast = 0; fast < nums.size(); ++fast) {
            if (nums[fast] != val) {
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }
};

基于排列构建数组

cpp 复制代码
class Solution {
public:
    vector<int> buildArray(vector<int>& nums) {
        vector<int> s(nums.size());
        for(int i=0;i<nums.size();i++){
            s[i]=nums[nums[i]];
        }
        return s;
    }
};

数组串联

cpp 复制代码
class Solution {
public:
    vector<int> getConcatenation(vector<int>& nums) {
        vector<int> s(nums.size()*2);
        for(int i=0;i<nums.size();i++){
            s[i]=nums[i];
            s[i+nums.size()]=nums[i];
        }
        return s;
    }
};
相关推荐
十秒耿直拆包选手7 分钟前
Qt:主窗体(QMainwindow)初始化注意事项
c++·qt
霖002 小时前
C++学习笔记三
运维·开发语言·c++·笔记·学习·fpga开发
mit6.8242 小时前
[shad-PS4] Vulkan渲染器 | 着色器_重新编译器 | SPIR-V 格式
c++·游戏引擎·ps4
地平线开发者2 小时前
征程 6M 部署 Omnidet 感知模型
算法·自动驾驶
秋说2 小时前
【PTA数据结构 | C语言版】线性表循环右移
c语言·数据结构·算法
tan77º3 小时前
【Linux网络编程】Socket - TCP
linux·网络·c++·tcp/ip
浩瀚星辰20243 小时前
图论基础算法:DFS、BFS、并查集与拓扑排序的Java实现
java·算法·深度优先·图论
Mike_Zhang4 小时前
C++使用WinHTTP访问http/https服务
c++
CHANG_THE_WORLD4 小时前
「macOS 系统字体收集器 (C++17 实现)」
开发语言·c++·macos
GiraKoo4 小时前
【GiraKoo】Breakpad 崩溃分析系统
c++