zoukankan      html  css  js  c++  java
  • 2017-3-10 leetcode 229 238 268

    今天登陆leetcode突然发现531被锁了,有种占了便宜的感觉哈哈哈!

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

    leetcode229 Majority Element II

    leetcode238 Product of Array Except Self

    leetcode268 Missing Number

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

    229讲的是
    给你n个数字,找出所有出现次数超过n/3的数字,要求O(n)time O(1)space
    这道题简化版是 leetcode169 解法见2017-3-6

    我的思路
    类似169,只不过这次因为总数大于[n/3],要维护两个候选数字(最多有两个元素符合要求),每次有新的数字出现的时候,两个计数器都要减。扫一遍得到两个候选数字后,再扫一遍确认数目是否符合要求。

     1 class Solution {
     2 public:
     3     vector<int> majorityElement(vector<int>& nums) {
     4         int n=nums.size();
     5         int num1=-1,num2=-1,cnt1=0,cnt2=0;
     6         for(int i=0;i<n;i++){
     7             if(num1==nums[i]){
     8                 cnt1++;
     9             }else if(num2==nums[i]){
    10                 cnt2++;
    11             }else if(!cnt1){
    12                 cnt1++;num1=nums[i];
    13             }else if(!cnt2){
    14                 cnt2++;num2=nums[i];
    15             }else{
    16                 cnt1--;cnt2--;
    17             }
    18         }
    19         cnt1=cnt2=0;
    20         for(int i=0;i<n;i++){
    21             if(nums[i]==num1)cnt1++;
    22             if(nums[i]==num2)cnt2++;
    23         }
    24         vector<int> aim;
    25         if(cnt1>n/3)aim.push_back(num1);
    26         if(cnt2>n/3)aim.push_back(num2);
    27         return aim;
    28     }
    29 };
    229

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

    238讲的是
    给你一个n个数的数组nums[i],输出一个n个数的数组output[i]=nums的累乘/nums[i]。要求不能使用除法,O(n)time

    我的思路
    求个前缀乘,求个后缀乘,然后乘在一起?????

     1 class Solution {
     2 public:
     3     vector<int> productExceptSelf(vector<int>& nums) {
     4         int n=nums.size();
     5         vector<int> pre_pro(n,1),suf_pro(n,1),output(n);
     6         for(int i=n-2;i>-1;i--){
     7             suf_pro[i]=suf_pro[i+1]*nums[i+1];
     8         }
     9         output[0]=suf_pro[0];
    10         for(int i=1;i<n;i++){
    11             pre_pro[i]=pre_pro[i-1]*nums[i-1];
    12             output[i]=suf_pro[i]*pre_pro[i];
    13         }
    14         return output;
    15     }
    16 };
    prefix*suffix

    击败了7%的用户,恩,意料之中
    看一下别人写的
    思维被局限了,如果只要求前缀和,我们可以O(1)space来解决,现在多了后缀,也可以,只需要顺序扫的同时把逆序的也处理一下。

     1 class Solution {
     2 public:
     3     vector<int> productExceptSelf(vector<int>& nums) {
     4         int n=nums.size();
     5         int pre_pro=1,suf_pro=1;
     6         vector<int> output(n,1);
     7         for(int i=0;i<n;i++){
     8             output[i]*=pre_pro;
     9             pre_pro*=nums[i];
    10             output[n-1-i]*=suf_pro;
    11             suf_pro*=nums[n-1-i];
    12         }
    13         return output;
    14     }
    15 };
    O(1)space

    击败了26%。。。哪里有问题呢。。。。我看了其他的代码,貌似思路都一样,可能是评测机抽风吧

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

    268讲的是
    给你n个不同的数字,a[i]属于[0,n],问你缺少了哪个数字

    思路
    水题。。。n*(n+1)/2减去累加和

     1 class Solution {
     2 public:
     3     int missingNumber(vector<int>& nums) {
     4         int n=nums.size(),tot=0;
     5         for(int i=0;i<n;i++){
     6             tot+=nums[i];
     7         }
     8         return n*(n+1)/2-tot;
     9     }
    10 };
    268
  • 相关阅读:
    Winform中多线程无法访问使用 Control.CheckForIllegalCrossThreadCalls = false;
    PV操作-生产者/消费者关系
    table表格长度超出屏幕范围,可滑动
    Koa2中间件计算响应总耗时/设置响应头/读取Json文件返回给客户端
    Koa2简介和搭建
    计算机浮点数的表示和运算
    CSS实现Loading加载中动画
    RPC
    Git常用命令
    如何解决 shell 脚本重复执行的问题
  • 原文地址:https://www.cnblogs.com/xuwangzihao/p/6531477.html
Copyright © 2011-2022 走看看