牛客网刷题记录

博主记录了在牛客网上刷题的过程,包括二进制中1的个数、数值的整数次方、调整数组顺序、链表倒数第k个节点、反转链表、合并两个排序链表、树的子结构以及二叉树的镜像等题目,分享了不同解题思路和学习心得。
摘要由CSDN通过智能技术生成

前言

想在刷完题后记录一下自己的思路和吸收的经验,很久之前就想尝试一下写博客,以此为契机,写下这个博客。本人是非计算机、软件专业的打码菜鸟一枚,请多指教。

1. 二进制中1的个数

题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目链接:二进制中1的个数
自己的做法:

import java.lang.Math;
public class Solution {
    public int NumberOf1(int n) {
        int num=0;
        int top=0;//最高的1所在的位
        int remain;
        while(Math.pow(2,top)<n){
            top++;
        }
        if(n==0)return 0;
        else if(n>=0){
            num++;
            remain=n-(int)Math.pow(2,--top);
            while(remain!=0){
                //top--;//将top逐渐缩小,看有多少1
                if(remain-Math.pow(2,--top)<0)continue;
                else{
                    remain=remain-(int)Math.pow(2,top);
                    num++;
                }
            }
            return num;
        }
        //else return 1;//小于零还没考虑。。。
    }
}

在本地是可以的,但是在牛客网上说超时

解法一:使用Integer.toString,从字符串里看

public class Solution {
    public int NumberOf1(int n) {
        String str=Integer.toBinaryString(n);
        int ans=0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='1')
                ans++;
        }
        return ans;
    }
}

解法二:使用&按位相与判断

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while(n != 0){
            count += (n & 1); //每次判断最低位是否为1
            n >>>= 1;
        }
        return count;
    }
}

貌似,java和c++的负数就是以补码形式表示,所以这里不用对小于零的情况分开讨论。

2. 数值的整数次方

题目链接:数值的整数次方
这个比较简单,不多说。

import java.lang.Math;
public class Solution {
    public double Power(double base, int exponent) {
        double ans=base;
        if(exponent>0)
        for(int i=0;i<exponent-1;i++){
            ans=base*ans;
        }
        else if(exponent==0)return 1;
        else{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值