基础数据结构第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;
    }
};
相关推荐
飞火流云11 分钟前
LSM树与B+树优缺点分析
数据结构·b树
代码的余温12 分钟前
B树与B+树:数据库索引背后的秘密
数据结构·数据库·b树
achene_ql1 小时前
OpenCV C++ 图像处理教程:灰度变换与直方图分析
c++·图像处理·人工智能·opencv·计算机视觉
zmuy1 小时前
148. 排序链表
数据结构·链表
W说编程1 小时前
算法导论第十四章 B树与B+树:海量数据的守护者
c语言·数据结构·b树·算法·性能优化
Jay Kay1 小时前
深入解析协程:高并发编程的轻量级解决方案
开发语言·c++·算法
岁忧1 小时前
(LeetCode 每日一题) 2966. 划分数组并满足最大差限制 (贪心、排序)
java·c++·算法·leetcode·职场和发展·go
mit6.8241 小时前
[Linux_core] “虚拟文件” | procfs | devfs | 上下文
linux·c语言·c++
lifallen1 小时前
Java BitSet类解析:高效位向量实现
java·开发语言·后端·算法
学不好python的小猫2 小时前
7-4 身份证号处理
开发语言·python·算法