牛客网刷题——斩获offer

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

一、数列的和

数列的定义如下:数列的第一项为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,我们这里用到的是无符号右移

目录
相关文章
|
4月前
|
算法 索引
力扣刷题【第一期】
这是一个关于算法的总结,包含7个不同的问题。1)爬楼梯问题,使用动态规划,通过迭代找到到达n阶楼梯的不同方法数。2)两数之和,通过双重循环找出数组中和为目标值的两个数的索引。3)移动零,使用双指针将数组中的0移到末尾。4)合并有序链表,创建新链表按升序合并两个链表。5)删除链表重复值,遍历链表删除重复元素。6)环形链表检测,使用快慢指针判断链表是否有环。7)相交链表,计算链表长度找
35 1
leetcode剑指 Offer 专项突击版(051、008、016)
leetcode剑指 Offer 专项突击版(051、008、016)
103 0
leetcode剑指 Offer 专项突击版(23、047、028、036)
leetcode剑指 Offer 专项突击版(23、047、028、036)
|
消息中间件 存储 Web App开发
牛客面经每日一总结(二)
牛客面经每日一总结(二)
|
存储 缓存 前端开发
牛客面经每日一总结(三)
牛客面经每日一总结(三)
|
存储 消息中间件 设计模式
牛客面经每日一总结(五)
牛客面经每日一总结(五)
|
存储 移动开发 JSON
牛客面经每日一总结(六)
牛客面经每日一总结(六)
|
资源调度 算法 网络协议
牛客面经每日一总结 (八)
牛客面经每日一总结 (八)
|
Web App开发 缓存 前端开发
牛客面经每日一总结(一)
牛客面经每日一总结(一)
|
前端开发 算法 JavaScript
牛客面经每日一总结(四)
牛客面经每日一总结(四)