【LeetCode每日一题】2807. 在链表中插入最大公约数(模拟+求最大公约数的6中写法)

2024-01-07 00:36

本文主要是介绍【LeetCode每日一题】2807. 在链表中插入最大公约数(模拟+求最大公约数的6中写法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2024-1-6

文章目录

    • [2807. 在链表中插入最大公约数](https://leetcode.cn/problems/insert-greatest-common-divisors-in-linked-list/)
    • 思路:模拟
            • 求最大公约数的几种方法:
      • 1.暴力枚举法
      • 2.辗转相除法
      • 3.辗转相除法 ---递归调用
      • 4.辗转相除法 ---递归调用---简化写法
      • 5.调用函数递归 更相减损法
      • 6.调用函数递归 更相减损法--简化

2807. 在链表中插入最大公约数

在这里插入图片描述

思路:模拟

1.调用函数求出要插入的最大公约数

2.插入到cur的后面

3.因为插了一位,所以移动两个位置

public ListNode insertGreatestCommonDivisors(ListNode head) {ListNode cur = head;while (cur.next!=null){int gcdVal = gcd(cur.val,cur.next.val);//调用函数求出要插入的最大公约数cur.next = new ListNode(gcdVal,cur.next);//插入到cur的后面cur = cur.next.next;//因为插了一位,所以移动两个位置}return head;}/*** 求两个结点值的最大公约数* @param a* @param b* @return*/private int gcd(int a,int b){//求最大公约数有多种写法while (a!=0){int temp = a;a = b % a;b = temp;}return b;}
求最大公约数的几种方法:

1.暴力枚举法

    public static int gcd(int a, int b) {int min = a < b ? a : b;//判断并取出两个数中小的数for (int i = min; i >= 1; i--) { //循环,从最小值开始,依次递减,直到i=1if (a%i==0&&b%i==0){    //当i能同时被A和B余尽时,返回ireturn i;}}return 0;}}

2.辗转相除法

 public static int gcd(int a, int b) {// 辗转相除法int c = a % b;   //先将a对b取余while (c != 0) {   //当余数不等于0时,一直进行循环,直到余数等于0,公约数就为ba = b;         //将a对b的余数再对b取余,直到循环结束b = c;c = a % b;}return b;}

3.辗转相除法 —递归调用

    public static int gcd(int a, int b) {// 辗转相除法 改进,调用函数递归int max = a > b ? a : b; //求出大的数int min = a < b ? a : b; //求出小的数if(max%min==0){return min;      //当大数模小数能余尽时,最大公约数就是小的数}return gcd(max%min,min);//递归函数,参数去前两个数的余数,和小的数

4.辗转相除法 —递归调用—简化写法

public static int gcd(int a, int b) {// 辗转相除法 改进,调用函数递归return (a % b == 0) ? b : gcd(b, a%b );// 相同思路,三元运算/简化写法}

1.如果a余b等于0,说明b就是最大公约数

2.否则,进行递归,b代替曾经的a,让a%b产生的余数代替曾经的b。

3.始终确保大数%小数

4.即使b位置上是值大于a, b代替a后,a(小数)%b(大数) = a ,相当于替换位置

  1. (b,a%b)的位置不能交换,否则无法跳出递归

5.调用函数递归 更相减损法

 public static int gcd(int a, int b) {//调用函数递归 更相减损法int max = a>b?a:b;int min = a<b?a:b;if(max%min==0){return min;}return gcd(max-min,min);//相同思路,将%改为-,优化速度}

6.调用函数递归 更相减损法–简化

    public static int gcd(int a, int b) {//调用函数递归 更相减损法 简易写法if (a < b) {int tmp = a;a = b;b = tmp;}return (a % b == 0) ? b : gcd(a - b, b);

简化不用找大小数,把大数放到前面

因为小数减大数为负数,所以要把大数替换到前面,

    public static int gcd5(int a, int b) {//调用函数递归 更相减损法 简易写法return (a % b == 0) ? b : a > b ? gcd5(a - b, b) : gcd5(b-a,a);}

压行写法,就是三目嵌套,就是可读性不高

点击移步博客主页,欢迎光临~

偷cyk的图

这篇关于【LeetCode每日一题】2807. 在链表中插入最大公约数(模拟+求最大公约数的6中写法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/578156

相关文章

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效