栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

经典题目刷一刷

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

经典题目刷一刷

目录

1.二进制的插入

2.查找组成一个偶数的最近两个素数

3.参数解析

4.跳石板


1.二进制的插入

二进制插入_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/30c1674ad5694b3f8f0bc2de6f005490?tpId=8&&tqId=11019&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

①题目及示例:

 ②方法解析:

按照题目意思,待插入的那一段均为0,那么我们很容易就会想到用或运算来完成,而从哪里插入就将待插入值右移多少位即可。注意!二进制的位数从0开始由低到高。我们画一个图来进一步解释:

 ③代码如下:

import java.util.*;
public class BinInsert {
    public int binInsert(int n, int m, int j, int i) {
        // write code here
        m<<=j;
        return m|n;
    }
}

2.查找组成一个偶数的最近两个素数

查找组成一个偶数最接近的两个素数_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9?tpId=37&&tqId=21283&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking

①题目及示例:

 ②方法解析:

由题,我们能够分析到,本题要找的东西需要满足几个条件,一是组成偶数的数需要是两个素数,二是需要这对素数差值最小。

其中需要注意因为要使差值最小,且数据都是成对出现,那么最小的差值,必定是离中间最近的地方,所以我们直接从中间来开始搜寻判断是不是素数。

③代码如下:

import java.util.*;
public class Main {
 public static void main(String[]args){
     Scanner sc=new Scanner(System.in);
 while(sc.hasNext()){
     int n=sc.nextInt();
     int mid=n/2;
     for(int i=mid;i>0;i--){
         if(isPrime(i)&&isPrime(n-i)){
             System.out.println(i);
             System.out.println(n-i);
             break;
         }
     }
 }
 }//写一个函数判断它是不是素数
    public static boolean isPrime(int n){
        for(int i=2;i<=Math.sqrt(n);i++){
            if(n%i==0){
                return false;
            }
        }
        return true;
    }
}

3.参数解析

参数解析_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677?tpId=37&&tqId=21

①题目及示例:

 ②方法解析:

首先我们这里先继续带大家理解一下题目的意思,这里的意思是,以空格为分界表示一个字符串,一对引号为特殊情况,这对引号汇聚的整体表示一个字符串(因此引号内的空格不需要进行分割)。进行计数。并且还要将每个部分输出,注意,引号部分输出的时候不加引号。解题的话主要就是灵活运用循环和条件语句的操作。直接上代码。

③代码如下:

import java.util.*;
public class Main {
 public static void main(String[]args){
     Scanner sc=new Scanner(System.in);
     String str=sc.nextLine();
     int count=0;
     for(int i=0;i 

4.跳石板

跳石板_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/4284c8f466814870bae7799a07d49ec8?tpId=85&&tqId=29852&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking

①题目及示例:

②方法解析:根据题意,我们可以默认把每个值的数据都设置为一个默认值,每跳跃一次,在原来的基础上进行+1(将1 - M个石板看做一个结果数组stepNum,每个stepNum[i]储存着从起点到这一步最小的步数,其中0为不能到达。 从起点开始对stepNum进行遍历,先求i的所有约数(即stepNum[i]能走的步数),然后更新那 几个能到达的位置的最小步数。如果不能到达则更新为此时位置的最小步数 + 1,如果是能到达的就更新为min(已记录的最小步数,此处的最小步数 + 1)),遍历一遍后得到结果。 )

a.设置一个数组来供我们记录(记录的值为跳跃对应的次数)

b.求一个数的约数

c.利用动态规划找出最小跳的次数

(我们来用一个图来进行具体的分析)

③代码如下:

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        int n = sca.nextInt(); 
        int m = sca.nextInt(); 
//和数组下标对应这里为m+1
        int[] step = new int[m+1];
        for(int i =0;i < m+1;i++){
//设定一个初始值
            step[i] =Integer.MAX_VALUE;
        }//起始位置n为0步
        step[n] = 0;
        for(int i =n;i < m;i++) {
         //当设计2到初始值,说明并没有跳,直接进行下次循环
            if(step[i] == Integer.MAX_VALUE) {
                continue;
            }
            //求当前值的约数
            List list = div(i);
            //j代表一次可以跳几块石板,此时j是list中的约数,本质上就是记录着跳几步
            //i代表当前石板的编号次数
            for(int j : list){
                if(i+j<=m && step[i+j] !=Integer.MAX_VALUE) {//表明在这之前已经有跳到这里的次数了
//动态规划的体现(已经有到这里的步数和下一步即将到这里的步数取最小值)
                    step[i+j] = Math.min(step[i+j],step[i]+1);
                }else if(i+j<=m) {//表明在这之前还没有跳到这里的次数,那么就记录当前次数
                    step[i+j] = step[i]+1;
                }
            }
        }//跳出循环后i+j=m;
        if(step[m]==Integer.MAX_VALUE) {//最终m处的次数若是为默认值,那么说明没有跳到这里的,失败,返回-1
            System.out.println(-1);
        }else{
            System.out.println(step[m]);
        }
    }
    //求约数
    public static List div(int num) {
        List list = new ArrayList<>();
        for(int i =2;i*i<=num;i++){
            if(num%i==0) {
                list.add(i);
                if(num/i!=i){//确保list中的数不重复
                    list.add(i);
                }
            }
        }
        return list;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820778.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号