虽说周末要早起来着,但是日子过得有点奇怪,一不小心就忘掉了。。。

leetcode414 https://leetcode.com/problems/third-maximum-number/?tab=Description

leetcode485 https://leetcode.com/problems/max-consecutive-ones/?tab=Description

leetcode495 https://leetcode.com/problems/teemo-attacking/?tab=Description

======================================

414说的是
给你n个数字(无序,有重复),输出第三大的数,如果没有,输出最大的,使用O(n)的算法。注意,你的排序中不能有相同的,也就是说如果输入2,3,2,3,我们要输出3,因为没有第三大的数字。

我的思路
这题目,一下子就会想到堆priority_queue,但是堆是nlogn的,好吧,手动维护三个数字分别表示最大、次大、次次大好了,但是初始化设成什么值好呢,用0x80 memset一下好了,得到的是-1e9,感觉 够大了。

 class Solution {
public:
int thirdMax(vector<int>& nums) {
int aim[];
int n=nums.size();
memset(aim,0x80,sizeof(aim));
for(int i=;i<n;i++){
if(nums[i]>aim[]){
aim[]=aim[];
aim[]=aim[];
aim[]=nums[i];
}
if(aim[]>nums[i]&&nums[i]>aim[]){
aim[]=aim[];
aim[]=nums[i];
}
if(aim[]>nums[i]&&nums[i]>aim[]){
aim[]=nums[i];
}
}
return aim[]==aim[]?aim[]:aim[];
}
};

WA

结果提交了一次,返回了WA,人家有数据是-2e9的。。。。好吧,那就写标记,用给的元素维护赋初值好了。

 class Solution {
public:
void swap(int &x,int &y){
x^=y;y^=x;x^=y;
}
int thirdMax(vector<int>& nums) {
int aim[],flag=;
int n=nums.size();
memset(aim,0x80,sizeof(aim));
for(int i=;i<n;i++){
if(flag==){
aim[]=nums[i];
flag++;
continue;
}
if(flag==){
if(nums[i]==aim[])continue;
aim[]=nums[i];
if(aim[]<aim[])swap(aim[],aim[]);
flag++;
continue;
}
if(flag==){
if(nums[i]==aim[]||nums[i]==aim[])continue;
if(nums[i]>aim[]){
aim[]=aim[];
aim[]=aim[];
aim[]=nums[i];
}else if(aim[]>nums[i]&&nums[i]>aim[]){
aim[]=aim[];
aim[]=nums[i];
}else aim[]=nums[i];
flag++;
continue;
}
if(nums[i]>aim[]){
aim[]=aim[];
aim[]=aim[];
aim[]=nums[i];
}
if(aim[]>nums[i]&&nums[i]>aim[]){
aim[]=aim[];
aim[]=nums[i];
}
if(aim[]>nums[i]&&nums[i]>aim[]){
aim[]=nums[i];
}
}
return flag!=?aim[]:aim[];
}
};

AC

完成是完成了,这也太丑了吧。。。去学习学习别人的写法。结果发现了这个。。。。

 int thirdMax(vector<int>& nums) {
set<int> top3;
for (int num : nums)
if (top3.insert(num).second && top3.size() > )
top3.erase(top3.begin());
return top3.size() == ? *top3.begin() : *top3.rbegin();
}

(很优美。。。。不想折叠),虽然set确实提供了logn的复杂度用来插入和删除,但是我们只需要前3大的数据,所以set的size只需要有3就好,log3算是常数.。。。。。。。心悦诚服

=======================================

485说的是
给你一个数组,只由01组成,问你最长的连续的1有多长
我的思路
没有思路,暴力出奇迹,扫一遍就好。

 class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int n=nums.size(),temp=,aim=;
for(int i=;i<n;i++){
if(nums[i])temp++;
else{
aim=max(aim,temp);
temp=;
}
}
aim=max(aim,temp);
return aim;
}
};

485

========================================

495说的是
有一个人的攻击可以让敌人中毒,毒会持续duration个时间单位,他会攻击很多次(不超过1e4),告诉你每次攻击的时间(非负,不超过1e7),问你敌人一共中毒中多久。
比如输入[1,2] 2 输出3
表示1秒2秒各攻击一次,每次中毒持续2秒,敌人一共中毒3秒

我的思路:
因为数据没有保证有序,先排序一下,然后扫一遍,记录每一个中毒区间的头尾,在出区间的时候统一计算时间加到答案里。复杂度O(nlogn)

 class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
vector<int> nums(timeSeries);
int n=nums.size();
sort(nums.begin(),nums.end(),less<int>());
int aim=,st=-,et=-;
for(int i=;i<n;i++){
if(nums[i]>et){
aim+=et-st;
st=nums[i];
et=st+duration;
}else{
et=nums[i]+duration;
}
}
aim+=et-st;
return aim;
}
};

495

很不开心啊。。。发现居然(75ms)只击败了27.6%不开心啊,看了看讨论版,发现别人的代码好像没有排序,我去题面看了看,人家加粗了一个单词“ascending ”,我当时不明白,以为是攻击力会提升,,,,现在明白了,人家说的是升序给出攻击时间序列2333333
好吧,去掉sort后63ms,击败了67%。。。。就这样吧,毕竟评测机不稳定。。。

2017-3-4 leetcode 414 485 495的更多相关文章

  1. C#版 - Leetcode 414. Third Maximum Number题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  2. 2017/11/22 Leetcode 日记

    2017/11/22 Leetcode 日记 136. Single Number Given an array of integers, every element appears twice ex ...

  3. 2017/11/21 Leetcode 日记

    2017/11/21 Leetcode 日记 496. Next Greater Element I You are given two arrays (without duplicates) num ...

  4. 2017/11/13 Leetcode 日记

    2017/11/13 Leetcode 日记 463. Island Perimeter You are given a map in form of a two-dimensional intege ...

  5. 2017/11/20 Leetcode 日记

    2017/11/14 Leetcode 日记 442. Find All Duplicates in an Array Given an array of integers, 1 ≤ a[i] ≤ n ...

  6. 2017/11/9 Leetcode 日记

    2017/11/9 Leetcode 日记 566. Reshape the Matrix In MATLAB, there is a very useful function called 'res ...

  7. 2017/11/7 Leetcode 日记

    2017/11/7 Leetcode 日记 669. Trim a Binary Search Tree Given a binary search tree and the lowest and h ...

  8. 2017/11/6 Leetcode 日记

    2017/11/6 Leetcode 日记 344. Reverse String Write a function that takes a string as input and returns ...

  9. 2017/11/5 Leetcode 日记

    2017/11/5 Leetcode 日记 476. Number Complement Given a positive integer, output its complement number. ...

随机推荐

  1. Websphere 手动模拟删除应用操作

    Websphere  手动模拟删除应用操作 切记:不要在程序还在运行的时候,直接的remove掉应用程序,不然,会发生意外的错误.       最近,在项目中,不小心手动移除了正在运行的应用,发现se ...

  2. Firebird Character Sets and Collations

    Firebird Character Sets and Collations Every CHAR or VARCHAR field can (or, better: must) have a cha ...

  3. SpringMVC(五)@RequestHeader和@CookieValue

    通过使用@RequestHeader获取请求头 通过使用@CookieValue获取cookie值 代码: 1: @Controller 2: public class TestHeader_Cook ...

  4. ZBrush中的PolyPainting如何理解?

    什么是PolyPainting? PolyPainting在ZBrush ®中是一种创建纹理的方法,该方法通过对每个多边形顶点应用单一RGB值来着色模型.此方法无需使用UV坐标.通过直接对顶点应用颜色 ...

  5. PhotoZoom如何使用调整大小配置文件

      众所周知PhotoZoom是一款图片无失真放大软件,所以在PhotoZoom中会有对尺寸大小调节功能.这里我们所要讲解的也是和尺寸调节等有关的功能——调整大小配置文件. 单击“调整大小配置文件.. ...

  6. java操作Excel的poi的简介

    一.POI概述 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 结构: HSSF - 提供读写Mi ...

  7. 采用tcp协议和UDP协议实现简单的聊天功能

    Date: 2019-06-19 Author: Sun 一. Python3输出带颜色字体 实现过程: ​ 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. ​ 转义 ...

  8. java中后端拼接字符串返回前台页面换行显示

    后端拼接时用:"\n"分割,比如: String str = "白日依山尽,\n" + "黄河入海流:"; 返回前台页面时,放入 <p ...

  9. SpringBoot事务注解详解

    @Transactional spring 事务注解 1.简单开启事务管理 @EnableTransactionManagement // 启注解事务管理,等同于xml配置方式的 <tx:ann ...

  10. 用SufaceGO加微软全家桶做个遥控车(一)

    作为一个dotnet技术的新手我是不好意思写帖子的,原因就是本人技术太水了,写出的帖子肯定会让人笑话.所以这次我是厚着脸皮写出这个帖子的,希望大佬们轻喷了.我的目标就是用SurfaceGo实现一个和我 ...