动态规划求数组中相邻两数的最小差值( 即相差的绝对值 ) java 实现

算法的核心是:计算当前数和前一个数的差值,用该差值和以前最小的连续数的差值作比较;如果当前的差值更小,则发现了更小的连续数的差值;如果当前的差值更大,则沿用以前的最小连续数差值作为新的最小连续数差值。

复制代码
MinDiffBetweenNeighborNumbersTest.java:
java 复制代码
import java.util.Random;


public class MinDiffBetweenNeighborNumbersTest {

    public static void main(String[] args) {
        Random random = new Random();
        int[] nums = {1,10,11,2,5,7,9,100,200,200,300};
        int length = nums.length;
        // 99,98      2,1    52,51   66,63

        // 求相差最小的2个相邻的数的差值( 即相差的绝对值 )
        int[][] dp = new int[length][3];
        // dp[i][0] 存储的是较大的数
        // dp[i][1] 存储的是较小的数
        // dp[i][2] 存储的是两数差值的绝对值
        for (int i = 0; i < length; i++) {
            int num = nums[i];
            if( i==0 ){
                dp[i][0] = num;
                dp[i][1] = num;
                dp[i][2] = 0;
            }else{
                int num_prev = nums[i-1];
                if( i == 1 ){
                    if( num > num_prev ){
                        dp[i][0] = num;
                        dp[i][1] = num_prev;
                    }else {
                        dp[i][0] = num_prev;
                        dp[i][1] = num;
                    }
                    dp[i][2] = Math.abs( num - num_prev );
                }else {
                    // 计算当前数和前一个数的差值,用该差值和以前最小的连续数的差值作比较;如果当前的差值更小,则发现了更小的连续数的差值;如果当前的差值更大,则沿用以前的最小连续数差值作为新的最小连续数差值
                    int diff = Math.abs(num - num_prev);
                    int diff_prev = dp[i - 1][2];
                    if( diff < diff_prev){
                        if( num> num_prev ){
                            dp[i][0]= num;
                            dp[i][1]= num_prev;
                        }else {
                            dp[i][0]= num_prev;
                            dp[i][1]= num;
                        }
                        dp[i][2] = diff;
                    }else {
                        dp[i][0] = dp[i-1][0];
                        dp[i][1] = dp[i-1][1];
                        dp[i][2] = diff_prev;
                    }
                }
            }
        }
        int[] result = dp[length - 1];
        System.out.println( result[0] + " 和 " + result[1] + " 相差 " + result[2] );
    }
}
相关推荐
猿究院_夏燊3 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog4 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿4 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河4 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
Jlzn88884 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
HPtiger5 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训5 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
香吧香5 小时前
GRPC连接机制---长连接分析
java·网络与传输协议
DongQiShanRen5 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy5 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构