leetcode

1、最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

解题思路:

  1. 定义一个函数f(n),以第n个数为结束点的子数列的最大和,存在一个递推关系f(n) = max(f(n-1) + A[n], A[n]);
  2. 将这些最大和保存下来后,取最大的那个就是,最大子数组和。因为最大连续子数组 等价于 最大的以n个数为结束点的子数列和 附代码
int maxSubArray(vector<int>& nums) {
        if(nums.size()==0)return NULL;
        int res=INT_MIN;
        int f_n=-1;
        for(int i=0;i<nums.size();++i){
          f_n=max(nums[i],f_n+nums[i]);
          res=max(f_n,res);
        }
        return res;
    }

2、最后一个单词的长度

给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。

def lengthOfLastWord(self, s: str) -> int:
      cnt,tail=0,len(s)-1
      while tail>=0 and s[tail]==' ':
        tail-=1
      while tail>=0 and s[tail]!=' ':
        cnt+=1
        tail-=1
      return cnt 

3、加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        for(int i=digits.size()-1;i>=0;i--){
          digits[i]+=1;
          if(digits[i]==10){
            digits[i]=0;
          }else{
            return digits;
          }
        }
        digits.insert(digits.begin(),1);//在数组开始的位置插入1
        return digits;
    }
};

4、二进制相加

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"
输出: "100"

class Solution {
public:
    string addBinary(string a, string b) {
        if(a=="0"&&b=="0"){
          return "0";
        }
        int as=a.size();
        int bs=b.size();
        while(as<bs){
          a='0'+a;
          ++as;
        }
        while(as>bs){
          b='0'+b;
          ++bs;
        }
        for(int i=a.size()-1;i>0;--i){
              a[i]=a[i]-'0'+b[i];
              if(a[i]>='2'){
                a[i] = (a[i] - '0') % 2 + '0';
                b[i-1]+=1;
              }
        }
        a[0] = a[0] - '0' + b[0];
        if(a[0]>='2'){
            a[0] = (a[0] - '0') % 2 + '0';
            a='1'+a;
        }
        return a;
    }

};

5、x的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

class Solution {
public:
    int mySqrt(int x) {
        if(x==1){
          return 1;
        }
        int min=0;
        int max=x;
        while(max-min>1){
          int m=(max+min)/2;
          if(x/m<m){
            max=m;
          }else{
            min=m;
          }
        }
        return min;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值