zoukankan      html  css  js  c++  java
  • LeetCode

    最近在刷C++primer,数据结构更新的更慢了。。基本把排序做完了,二叉树写了一点点。。懈怠了!但是没并没有写到博客,也刷了一些LeetCode上面的题目,发现自己有思路,但是实现一个算法真的好难。。而且效率不一定高。。下面就把我最近刷的一些题目贴出来

    1。moveZeros这个主要看重的是这个tag的设置,它可以帮助我们移动最少的步数

    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            vector<int>::iterator beg = nums.begin();
            unsigned int tag = 0;
            decltype(nums.size()) len = nums.size();
            for (int i = 0; i < len; ++i){
                if (*(beg + i) != 0 && tag != 0)*(beg + i - tag) = *(beg + i);
                if (*(beg + i) == 0)++tag;
            }
            for (int j = len - tag; j < len; ++j){
                *(beg + j) = 0;
            }
        }
    };

    2。firstBadVersion采用二分法查找啦

    // Forward declaration of isBadVersion API.
    bool isBadVersion(int version);
    
    class Solution {
    public:
        int firstBadVersion(int n) {
              int start=1,end=n;
              int middle;
              while(start<=end){
                  middle=start+(end-start)/2;
                  if(isBadVersion(middle))end=middle-1;
                  else start=middle+1;
              }
              return end+1;
        }
    };
    

    3.hIndex先排序再找,这个我击败了100%的人呢~

    class Solution {
    public:
        int hIndex(vector<int>& citations) {
            vector<int>::iterator beg = citations.begin(), end = citations.end();
            sort(beg, end);
            auto len = citations.size();
            if(len==0)return 0;
            if (*beg >= len) return len;
            int i;
            for (i = len; i>=1; --i){
                if (*(end - i) >= i && *(end - i- 1) <= i)return i;
            }
            return 0;
        }
    };

    4.missingNumber,先求总的,然后看缺的是哪个数

    class Solution {
    public:
        int missingNumber(vector<int>& nums) {
          int sum=0;
          for(int i=1;i<=nums.size();++i)
          sum+=i;
          for(auto i:nums)
          sum-=i;
          return sum;
        }
    };

    5.addDigits这个是个规律,按照1~9一直循环但是9%9=0,所以先-1,最后再+1

    class Solution {
    public:
        int addDigits(int num) {
          return (num - 1) % 9 + 1;
        }
    };

    6.isPowerOfTwo,这个就是直接除除除啦。。发现如果有余数就不是2的n次幂,直接跳出

    class Solution {
    public:
        bool isPowerOfTwo(int n) {
            if(n<=0)return false;
            while(n!=1&&n!=0)
            {
                if(n%2)return false;
                n=n/2;
            }
            if(n==1)return true;
            else return false;
        }
    };

    7.mySqrt这个注意不要用乘法或者加法,很容易导致溢出,从而导致结果不正确

    class Solution {
    public:
        int mySqrt(int x) {
            if(x<=0) return 0;
            int end=x/2+1;
            int begin=1;
            int half;
            int com;
            while(begin<end-1){
                   half=(begin+end)/2;
                   com=x/half;
                  if(half==com)return half;
                  if(half<com){
                  begin=half;
                  }
                  else
                  end=half;
            }
            return begin;
        }
    };
  • 相关阅读:
    mysql索引批量在postgres里面重建
    获取metabase用户信息
    metabase一个sql统计
    C笔记-左值与右值
    前端散记(不定时补充)
    推荐一本书 保险进行时
    怎么增加照片的KB大小
    Java 流(Stream)、文件(File)和IO
    Java HashMap 和 ConcurrentHashMap 以及JDK 1.7 和 1.8 的区别
    【一文整理:Google Big table 序列化组件 Protocol Buffers 的使用 】
  • 原文地址:https://www.cnblogs.com/csudanli/p/4899716.html
Copyright © 2011-2022 走看看