提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、加油站
- 二、分发糖果
- 三、柠檬水找零
- 四、根据身高重建队列
- 1.引入库
- 2.读入数据
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
今天是跟着代码随想录刷题的第三十五天,主要是学习了加油站,分发糖果,柠檬水找零和根据身高重建队列这四道题。
提示:以下是本篇文章正文内容,下面案例可供参考
一、加油站
暴力解法:
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int i;vector<int> a;int result=0;int start;int finish=1;int b;for(i=0;i<gas.size();i++){a.push_back(gas[i]-cost[i]);}for(i=0;i<a.size();i++){result=result+a[i];}if(result<0) return -1;for(start=0;start<a.size();start++){result=0;for(i=start;i<a.size();i++){result=result+a[i];if(result<0) {finish=0;break;}}for(i=0;i<start;i++){result=result+a[i];if(result<0) {finish=0;break;}}if(finish==1) {break;}finish=1;}return start;}
};
贪心算法
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curSum = 0;int totalSum = 0;int start = 0;for (int i = 0; i < gas.size(); i++) {curSum += gas[i] - cost[i];totalSum += gas[i] - cost[i];if (curSum < 0) { // 当前累加rest[i]和 curSum一旦小于0start = i + 1; // 起始位置更新为i+1curSum = 0; // curSum从0开始}}if (totalSum < 0) return -1; // 说明怎么走都不可能跑一圈了return start;}
};
贪心算法就是我就一直累加,如果小于0,就说明前面这些都不可能是起点,因为如果是起点,那么起点到这大于0,整个小于0,前面第一段也小于0,说明有更早的起点,然后因为可以保持一直是最早的正数,所以这里就是最合适的起点的位置,可以累积正数。
二、分发糖果
思路:先从左到右保证如果右边大于左边,右边加1,不然就保持1,如果左边大于右边,左边加1和原本的比大小,取大的,就能保证两边了。
代码:
class Solution {
public:int candy(vector<int>& ratings) {int a=ratings.size();vector<int> result(ratings.size(), 1);int result1=0;int i;for(i=0;i<result.size()-1;i++){if(ratings[i+1]>ratings[i]){result[i+1]=result[i]+1;}}for(i=result.size()-1;i>0;i--){if(ratings[i-1]>ratings[i]){result[i-1]=max(result[i-1],result[i]+1);}}for(i=0;i<result.size();i++){result1=result1+result[i];}return result1;}
};
三、柠檬水找零
思路:这道题就是思考柠檬水所有可能得情况来一种情况一种情况分析就可以了
代码:
class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five=0,ten=0,i=0;for(i=0;i<bills.size();i++){if(bills[i]==5) five++;if(bills[i]==10){if(five==0) return false;else ten++,five--;}if(bills[i]==20){if(five!=0&&ten!=0){five--;ten--;}else if(ten==0&&five>2){five=five-3;}else return false;} }return true;}
};
四、根据身高重建队列
思路:
这道题就是按照身高由高到低先排个序,然后如果身高一样的,就第二位小的排序,首先得建立这个排序的思路,按照这个顺序排序以后,然后这种情况就能保证前面的和自己一样大或者比自己更大,再按照第二位看,是不是这个排序,比如第二位是3,就说明前面有三个比我要大,所以应该排在第三的位置。
所以看第二位是几,就排在那个位置就行。
版本一:
class Solution {
public:static bool cmp(const vector<int>& a, const vector<int>& b) {if (a[0] == b[0]) return a[1] < b[1];return a[0] > b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort (people.begin(), people.end(), cmp);vector<vector<int>> que;for (int i = 0; i < people.size(); i++) {int position = people[i][1];que.insert(que.begin() + position, people[i]);}return que;}
};
版本二:
代码:
class Solution {
public:// 身高从大到小排(身高相同k小的站前面)static bool cmp(const vector<int>& a, const vector<int>& b) {if (a[0] == b[0]) return a[1] < b[1];return a[0] > b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort (people.begin(), people.end(), cmp);list<vector<int>> que; // list底层是链表实现,插入效率比vector高的多for (int i = 0; i < people.size(); i++) {int position = people[i][1]; // 插入到下标为position的位置std::list<vector<int>>::iterator it = que.begin();while (position--) { // 寻找在插入位置it++;}que.insert(it, people[i]);}return vector<vector<int>>(que.begin(), que.end());}
};
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。