LeetCode177--不用加减乘除做加法(O65)、队列的最大值(O59)、n个骰子的点数(O60)、把字符串转换成整数(O67)

1、不用加减乘除做加法

//写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
//
//
//
// 示例:
//
// 输入: a = 1, b = 1
//输出: 2
//
//
//
// 提示:
//
//
// a, b 均可能是负数或 0
// 结果不会溢出 32 位整数
//
// Related Topics 位运算 数学

不用加减乘除做加法,直接采用本位加进位的方式进行,按位进行异再左移一位就能得到进位,按位相与就能得到本位,然后相加,直到最后进位为0.

public int add(int a, int b) {
   
        while(b != 0){
   
            int c = (a&b)<<1;
            a ^= b;
            b=c;
        }
        return a;
    }

2、队列的最大值

采用双向队列来实现队列的最大值,首先还是采用队列来存储这些个数据,额外再实现一个双向队列,双向队列需要保持单调,首大尾小,因为当我们加一个新的数到队列中的时候,如果单调队列中前面的数小于当前数,那这是对它本身没有影响的,只有比它大的数才有影响,所以当我们添加进一个数到单调队列中的时候,我们需要将比它小的数全部出队列,再将其添加进去。
方法一:暴力法
暴力法构造了一个数组,用于求数组中最大的值是多少

class MaxQueue {
   
    //采用数组的方式
    int[] q = new int[20000];
    int begin = 0, end = 0;
    public MaxQueue() {
   
    }
    
    public int max_value() {
   
        int ans = -1;
        for (int i = begin; i != end; i++) {
   
            ans = Math.max(ans, q[i]);
        }
        return ans;
    }
    
    public void push_back(int value) {
   
        q[end++] = value;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值