牛客网刷题——斩获offer

简介: 牛客网刷题——斩获offer

@TOC

一、数列的和

数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。
输入描述:
输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。
输出描述:
对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。
在这里插入图片描述

import java.util.Scanner;
public class Main {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            double sum = 0;
            double n = a;
            while(b > 0) {
                sum += n;
                n = Math.sqrt(n);
                b--;
            }
            System.out.printf("%.2f\n",sum);
        }
    }
}

二、寻找奇数

现在有一个长度为 n 的正整数序列,其中只有一种数值出现了奇数次,其他数值均出现偶数次,请你找出那个出现奇数次的数值。
在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();   
        int ret = 0;
        for(int i = 0 ;i < n;i++) {
            ret ^= scanner.nextInt();
        }
        System.out.println(ret);
    }
}

三、数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
在这里插入图片描述

public static int duplicate (int[] numbers) {
        Arrays.sort(numbers);
        int n = -1;
        for (int i = 0; i < numbers.length-1; i++) {
            if(numbers[i] == numbers[i+1]) {
                n = numbers[i];
                return n;
            }
        }
        return n;
    }

    public static void main(String[] args) {
        //数组中重复的数字
        int[] arr = {2,3,1,0,2,5,3};
        int n = duplicate(arr);
        System.out.println(n);
    }

在这里插入图片描述

四、替换空格

请实现一个函数,将一个字符串s中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
在这里插入图片描述

public static String replaceSpace (String s) {
        char[] arr = s.toCharArray();
        int length = arr.length;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ' ') {
                length += 2;
            }
        }
        char[] ch = new char[length];
        length--;
        for (int i = arr.length-1; i >= 0; i--) {
            if(arr[i] != ' ') {
                ch[length--] = arr[i];
            } else {
                ch[length--] = '0';
                ch[length--] = '2';
                ch[length--] = '%';
            }
        }
        String str = new String(ch);
        return str;
    }
    public static void main(String[] args) {
        //替换空格
        System.out.println(replaceSpace("We Are Happy"));
    }

在这里插入图片描述

五、旋转数组最小数字

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
在这里插入图片描述

public int minNumberInRotateArray(int [] array) {
        int left = 0;
        int right = array.length-1;
        while(left < right) {
            int mid = (left + right) / 2;
            if(array[mid] > array[right]) {
                //最小数在右边
                left = mid + 1;
            }else if(array[mid] == array[right]) {
                right--;
            }else {
                right = mid;
            }
        }
        return array[left];
    }

六、二进制中1的个数

输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
在这里插入图片描述
在这里插入图片描述

public int NumberOf1(int n) {
       //二进制中1的个数
        int count = 0;
        while(n != 0) {
            if((n & 1) == 1) {
                count++;
            }
            n >>>= 1;
        }
        return count;
    }

特别注意这里负数统计1的个数时,如果是逻辑右移,每次它都会在前面补1,我们这里用到的是无符号右移

目录
相关文章
|
2天前
|
算法 索引
力扣刷题【第一期】
这是一个关于算法的总结,包含7个不同的问题。1)爬楼梯问题,使用动态规划,通过迭代找到到达n阶楼梯的不同方法数。2)两数之和,通过双重循环找出数组中和为目标值的两个数的索引。3)移动零,使用双指针将数组中的0移到末尾。4)合并有序链表,创建新链表按升序合并两个链表。5)删除链表重复值,遍历链表删除重复元素。6)环形链表检测,使用快慢指针判断链表是否有环。7)相交链表,计算链表长度找
7 1
|
11月前
|
算法 JavaScript 容器
牛客网《剑指offer》专栏刷题练习之数组专精
牛客网《剑指offer》专栏刷题练习之数组专精
67 0
leetcode剑指 Offer 专项突击版(051、008、016)
leetcode剑指 Offer 专项突击版(051、008、016)
leetcode剑指 Offer 专项突击版(23、047、028、036)
leetcode剑指 Offer 专项突击版(23、047、028、036)
图解LeetCode——剑指 Offer 47. 礼物的最大价值
图解LeetCode——剑指 Offer 47. 礼物的最大价值
67 0
|
人工智能 物联网 BI
牛客月赛62思考和总结
牛牛在幼稚园做义工,幼稚园中共有 nnn 颗树,第 1 天中午时它们的高度分别为:h1,h2,…,hnh_1,h_2,…,h_nh1​,h2​,…,hn​ (单位:厘米)。每一天的晚上每棵树的高度都会增加 aaa 厘米,而牛牛的任务则是在第二天的清晨检查每一颗树的高度,若某颗树的高度超过了 kkk 厘米牛牛就会将它的高度修剪为 bbb 厘米。牛牛想请你帮它计算一下第 mmm 天中午每一颗树的高度。
86 0
|
Java Python
【LeetCode每日一题】剑指 Offer 14- I. 剪绳子(持续更新)
【LeetCode每日一题】剑指 Offer 14- I. 剪绳子(持续更新)
44 0
|
Java Python
【LeetCode每日一题】剑指 Offer 14- II. 剪绳子 II(持续更新)
【LeetCode每日一题】剑指 Offer 14- II. 剪绳子 II(持续更新)
57 0
|
Java Python
【LeetCode每日一题】剑指 Offer 10- II. 青蛙跳台阶问题(持续更新)
【LeetCode每日一题】剑指 Offer 10- II. 青蛙跳台阶问题(持续更新)
60 0