IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 九日打卡-5-阅读报告 -> 正文阅读

[数据结构与算法]九日打卡-5-阅读报告

知识点

1 快速排序

优点:平均性能好,通常是实际排序应用中最好的选择

思路:采用分治的思想。将数组划 A[p,r] 划分成两个子数组A[p,q-1],A[q+1,r]和一个数A[q],使得子数组1中的所有数均小于等于A[q],子数组2中的所有数均大于等于A[q].

代码:

if(p<r)
{
    q=partition(A,p,r);
    quicksort(A,p,q-1);
    quicksort(A,q+1,r);
}

核心代码:寻找q,即选择主元

partition(A,p,r)
x = A[r];
i = p-1;
for j=p to r-1;
if(A[j]<=x)
{
    i=i+1;
    exchange A[i] with A[j]
}
excahnge A[i+1] with A[r]
return i+1;

6 题目描述

给定一个 24 小时制(小时:分钟?"HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。

class Solution {
public:
int f(string a){
    return (a[0]*10+a[1])*60+a[3]*10+a[4];
}
    int findMinDifference(vector<string>& timePoints) {
    vector<int>nums;
    for(auto it:timePoints){
        nums.emplace_back(f(it));
        nums.emplace_back(f(it)+1440);  //将一天变成两天
    }
    sort(nums.begin(),nums.end());
    int jie=INT_MAX;
    for(int i=0;i<nums.size()-1;i++) {
    jie=min(jie,nums[i+1]-nums[i]);
    }
    return jie;
    }
};

7 题目描述

给定由一些正数(代表长度)组成的数组?A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。

如果不能形成任何面积不为零的三角形,返回?0

class Solution {
    public int largestPerimeter(int[] A) {
        Arrays.sort(A);
        for(int i = A.length - 1; i >= 2; i--) {
            int a = A[i];
            int b = A[i - 1];
            int c = A[i - 2];
            if(a < b + c){
                return a + b + c;
            }
        }
        return 0;
    }
}

8 题目描述

第?i?个人的体重为?people[i],每艘船可以承载的最大重量为?limit。

每艘船最多可同时载两人,但条件是这些人的重量之和最多为?limit。

返回载到每一个人所需的最小船数。(保证每个人都能被船载)。

class Solution {
public:
    int numRescueBoats(vector<int> &people, int limit) {
        int ans = 0;
        sort(people.begin(), people.end());
        int light = 0, heavy = people.size() - 1;
        while (light <= heavy) {
            if (people[light] + people[heavy] > limit) {
                --heavy;
            } else {
                ++light;
                --heavy;
            }
            ++ans;
        }
        return ans;
    }
};

练习题

1 题目描述??912.排序树组

给你一个整数数组?nums,请你将该数组升序排列。

class Solution {
public:
    vector<int> sortArray(vector<int>& nums) 
    {
        int length=nums.size();
        for(int i=0;i<length;i++)
        {
            for(int j=length-1;j>i;j--)
            {
                int temp=0;
                if(nums[i]>nums[j])
                {
                    temp=nums[j];
                    nums[j]=nums[i];
                    nums[i]=temp;
                }
            }
        }
        return nums;
    }
};

2 题目描述?169.多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于?? n/2 ??的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        //建立哈希数组找其中出现次数大于n/2的数
        unordered_map<int,int> hash;
        int res=0;
        int len=nums.size();
        for(int i=0;i<len;i++){
            hash[nums[i]]++;
          if(hash[nums[i]]>len/2){
                res=nums[i];
                break;//优化一下
            }    
        }
        return res;
    }
};

3 题目描述?217.存在重复元素

给定一个整数数组,判断是否存在重复元素。

如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        for(int i=0;i<nums.size()-1;i++)
        {
            if(nums[i]==nums[i+1])
            {
                return true;
            }
        }
        return false;

    }
};

4 题目描述??

给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。

如果数组元素个数小于 2,则返回 0

class Solution {
public:
    int maximumGap(vector<int>& nums) {
        int n = nums.size();
        if (n < 2) {
            return 0;
        }
        int exp = 1;
        vector<int> buf(n);
        int maxVal = *max_element(nums.begin(), nums.end());

        while (maxVal >= exp) {
            vector<int> cnt(10);
            for (int i = 0; i < n; i++) {
                int digit = (nums[i] / exp) % 10;
                cnt[digit]++;
            }
            for (int i = 1; i < 10; i++) {
                cnt[i] += cnt[i - 1];
            }
            for (int i = n - 1; i >= 0; i--) {
                int digit = (nums[i] / exp) % 10;
                buf[cnt[digit] - 1] = nums[i];
                cnt[digit]--;
            }
            copy(buf.begin(), buf.end(), nums.begin());
            exp *= 10;
        }

        int ret = 0;
        for (int i = 1; i < n; i++) {
            ret = max(ret, nums[i] - nums[i - 1]);
        }
        return ret;
    }
};

5 题目描述

给定一个非负整数数组?A,返回一个数组,在该数组中,?A?的所有偶数元素之后跟着所有奇数元素。

你可以返回满足此条件的任何数组作为答案。

class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
int i=0;//头指针
int j=nums.size()-1;//尾指针
while(i<j){//头小于尾
if(nums[i]%2==0){//如果第一个数是偶数就往后继续判断
i++;//因为他要求的就是偶数放在前面
}
else{
int a=nums[i];//交换两个值,不解释傻子都会
nums[i]=nums[j];
nums[j]=a;
j--;//每次换完之后都会跟下一个减一去交换
}
}
return nums;//返回数组
}
};
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:44:21  更:2022-01-17 11:46:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:37:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码