【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

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists