2024年最全[java刷算法]牛客—剑指offer动态规划,位移比较,负乘方转换,5分钟搞定

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

image

(2)刷的算法题(还有左神的算法笔记)

image

(3)面经+真题解析+对应的相关笔记(很全面)

image

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取


文章目录

  • ✨今日三剑

  • JZ14 剪绳子

    • 题目描述
  • 思路详解

  • 代码与结果

  • JZ15 二进制中1的个数

    • 题目描述

    • 思路详解

    • 代码与结果

  • JZ16 数值的整数次方

    • 题目描述

    • 思路详解

    • 代码与结果

  • ✨总结


JZ14 剪绳子

========================================================================

题目描述


在这里插入图片描述

在这里插入图片描述

思路详解

====================================================================

本题使用动态规划来解题,注意找规律哦

首先我们考虑一段绳子,如果一旦分出一段长度为1的小段,只会减少总长度,还不能增加乘积,因此长度为2的绳子不分比分开的乘积大,长度为3的绳子不分比分开的乘积大,长度为4的绳子分成2*2比较大。前面的我们都可以通过这样递推得到,后面的呢?

同样递推!如果我有一个长度为n的绳子,我们要怎么确定其分出最大的乘积,我们可以尝试其中一段不可分的为j,那么如果另一段n−j最大乘积已知,我们可以遍历所有j找到这个最大乘积。因此用dp[i]表示长度为i的绳子可以被剪出来的最大乘积,那么后续遍历每个j的时候,我们取最大dp[i]=max(dp[i],j∗dp[i−j])就好。

代码与结果

=====================================================================


import java.util.*;



public class Solution {

    /**

     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可

     *

     * 

     * @param n int整型 

     * @return int整型

     */

    public int cutRope(int target) {

        //不超过3直接计算

        if(target <= 3)

            return target- 1;

        //dp[i]表示长度为i的绳子可以被剪出来的最大乘积

        int[] dp = new int[target + 1];

        dp[1] = 1;

        dp[2] = 2;

        dp[3] = 3;

        dp[4] = 4;

        //遍历后续每一个长度

        for(int i = 5; i <= target; i++)

            //可以被分成两份

            for(int j = 1; j < i; j++)

                //取最大值

                dp[i] = Math.max(dp[i], j * dp[i - j]);

        return dp[target];

    }

}



在这里插入图片描述

JZ15 二进制中1的个数

=============================================================================

题目描述


在这里插入图片描述

在这里插入图片描述

思路详解


本题我们采用按位比较,使用移位的方法不仅可以达到效果而且运行速度也会更快哦

代码与结果



import java.util.*;

public class Solution {

    public int NumberOf1(int n) {

        int res = 0;

        //遍历32位

        for(int i = 0; i < 32; i++){

            //按位比较

            if((n & (1 << i)) != 0)  

                res++;

        }

        return res;

    }

}



在这里插入图片描述

JZ16 数值的整数次方

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

》**

[外链图片转存中…(img-DMivhR9m-1715094083765)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值