intgcd(int a, int b){ // 要保证a>=b return b ? gcd(b, a % b) : a; }
而遍历写法不那么清晰但空间复杂度为$O(1)$:
1 2 3 4 5 6 7 8 9 10 11 12
intgcd(int a, int b){ if (a > b) { swap(a, b); } while (b) { // (a, b) = (b, a % b); int tmp = b; b = a % b; a = tmp; } return a; }
时间复杂度$O(len(nums)\times\log nums[i])$
空间复杂度$O(\log nums[i])$或$O(1)$
AC代码
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* * @LastEditTime: 2026-07-18 07:01:47 */ classSolution { public: intfindGCD(vector<int>& nums){ int m = nums[0], M = m; for (int t : nums) { m = min(m, t); M = max(M, t); } returngcd(m, M); } };
/* * @LastEditTime: 2026-07-18 07:23:34 */ classSolution { private: intgcd1979(int a, int b){ if (a > b) { swap(a, b); } while (b) { // (a, b) = (b, a % b); int tmp = b; b = a % b; a = tmp; } return a; } public: intfindGCD(vector<int>& nums){ int m = nums[0], M = m; for (int t : nums) { m = min(m, t); M = max(M, t); } returngcd1979(m, M); } };
Python
1 2 3 4 5 6 7 8 9
''' LastEditTime: 2026-07-18 07:04:07 ''' from typing importList from math import gcd