算法水题练习
//斐波那契数列 int f[31];//定义一个全局辅助数组 int fib(int n){ f[0]=0; f[1]=1;//初始化.分别存储在第0,1位置 for(int i=2;i<=n;i++){ f[i]=f[i-1]+f[i-2];//一层循环模拟递推公式 } return f[n]; } //n的第k个因子 int kthFactor(int n, int k){ int i, cnt = 0; // (1)cnt为因子计数器 for(i = 1; i <= n; ++i) { // (2)//枚举 if(n % i == 0) { // (3)找到 ++cnt; // (4)+1 if(cnt == k) return i; // (5) 找到 } } return -1; // (6)没找到 } //统计平方和三元组 int max(int a, int b) { return a > b ? a : b; // (1)一个函数返回最大的那个 } int countTriples(int n){ int a, b, c, sum, ans = 0; for(a = 1; a <= n; ++a) { for(b = 1; b <= n; ++b) { sum = a*a + b*b; // (2)二层循环枚举a,b.得到他们的和 for(c = max(a, b)+1; c <= n; ++c) { // (3)枚举c.但是一定要比a,b里面的最大的还要大.降低复杂度 if(sum == c*c) { ++ans; // (4)找到就跳出 break; } if(sum < c*c) { break; // (5)不符合条件 } } } } return ans; } //找出数组的最大公约数 int gcd(int a, int b) { int i; for(i = a; i >= 1; --i) { if(a % i == 0 && b % i == 0) { return i; // (1)枚举 } } return 1; } int findGCD(int* nums, int numsSize){ int i; int min = nums[0], max = nums[0]; for(i = 1; i < numsSize; ++i) { if(nums[i] < min) min = nums[i]; // (2)选择最大小的数 if(nums[i] > max) max = nums[i]; // (3) } return gcd(min, max); // (4) } //最大三角形的面积 double area(int *a, int *b, int *c) { return fabs( (b[0]-a[0]) * (c[1]-a[1]) - (b[1]-a[1]) * (c[0]-a[0]) ) / 2; } double largestTriangleArea(int** points, int pointsSize, int* pointsColSize){ int i, j, k; double a, maxa = 0; for(i = 0; i < pointsSize; ++i) { for(j = 0; j < pointsSize; ++j) { for(k = 0; k < pointsSize; ++k) { a = area(points[i], points[j], points[k]); // (1)枚举 if(a > maxa) { maxa = a; // (2)找到最大的保存 } } } } return maxa; // (3)返回最大面积 } //数组异或操作 //分两步模拟,先把所有数都通过规则生成出来。然后再将所有数异或, //因为异或满足左结合律,所以可以一边生成,一边异或,最后返回所有数异或的和。 int xorOperation(int n, int start){ int i, ans = 0; for(i = 0; i < n; ++i) { ans ^= start + i*2; // (1)一边生成 一边异或 } return ans; } //整数的各位积和之差 // 首先,可以利用迭代将每位数字取出来,然后用两个变量 //在迭代的过程中,分别保存它们的 积 与 和,然后再相减即可。 int subtractProductAndSum(int n){ int prod = 1, sum = 0, digit; while(n) { digit = n % 10; // (1)取当前数字的最低位 prod *= digit; // (2乘积存储在prod sum += digit; // (3)和存在 sum n /= 10; // (4)将数字除10 } return prod - sum; } //统计位数为偶数的数字 //对每个数字不断除10,然后统计多少位,如果位数为偶数则计数器加一,最后返回计数器 int findNumbers(int* nums, int numsSize){ int i, bit, cnt = 0; for(i = 0; i < numsSize; ++i) { bit = 0; while(nums[i]) { nums[i] /= 10; ++bit; // (1)对于每个数.不断除10.统计当前数的位数 } if(bit % 2 == 0) ++cnt; // (2)位数为偶数,则计数器自增 } return cnt; } //搜索旋转排序数组 整数数组nums按升序排列,数组中的值 互不相同 。给你 旋转后 的数组nums和一个整数target 如果nums中存在这个目标值target,则返回它的下标,否则返回-1。 //这个问题问了一大堆,最后其实就是在一个数组中找一个数,找不到就返回 -1。 //OK,直接搞,不要有顾虑,O ( n ) O(n)O(n) 还能怎么卡你?怎么卡都卡不住,一次遍历完事。 int search(int* nums, int numsSize, int target){ int i; for(i = 0; i < numsSize; ++i) { if(nums[i] == target) { return i; // (1) 遍历数组.找到满足条件的数.返回对应下标 } } return -1; // (2)遍历完没找到.返回-1 } //差的绝对值为K的数对数目 给你一个整数数组 n u m s numsnums 和一个整数 k kk,长度小于等于 200,请你返回数对 ( i , j ) (i, j)(i,j) 的数目,满足 i < j i < ji
西媒眼部检查可提前预测心脏病参考消息网2月14日报道据西班牙经济学家报网站2月12日报道,英国利兹大学的研究表明,通过简单的眼部检查可以在心脏病发作前12个月提早被发现,而正是人工智能技术使之成为可能。报道称
我国开发出媲美人脑能效器件可构建神经网络计算系统据报道,中国科学技术大学李晓光教授团队在高性能类脑突触原型器件方面取得了重要进展。在前期研究基础上,该团队基于对铁电畴形态和翻转动力学的设计,在铁电量子隧道结中实现了亚纳秒电脉冲下
为什么智能手机的屏幕变得越来越大?是营销手段,还是大众需求?为什么智能手机的屏幕变得越来越大?是营销手段,还是大众需求?第一手机屏幕变大和手机变大是两个概念,如果只是为了散热,完全可以保持屏幕不变,把手机做得更大,事实不是这样,现实情况是各
go语言适合写桌面程序吗?目前来看,Go语言并不适合写桌面程序。前面我也回答过一篇关于Go语言是否适合发展成桌面程序的问题。我们必须承认,任何一门语言,在发展和壮大的过程中,甚至其被推广使用的过程中,不仅是
昔日国产手机企业回归,未来或将接入鸿蒙操作系统在手机操作系统领域,苹果的IOS和谷歌的安卓已浸淫多年,由于IOS的独有性,谷歌的安卓对于国产手机企业来说,几乎是唯一的选择,并不是好用,而是没有选择。但是安卓虽开源,但生态系统G
2021年10月手机选购30004000元旗舰机品牌中高端主用机型选机前言30004000元,这个区间其实都很大,我之前都是习惯几百一个区间,这样去对比建议会比较客观。拉到1000元的跨度,无论是处理器屏幕摄像内存续航单个板块都可以做比较显著的升
电脑主机嗡嗡响,会影响电脑吗?知讯早扒点20190927只要不是特别严重就不会影响电脑的正常工作。电脑机箱里的主板上有CPU北桥芯片以及显卡等部件,这些部件都会在工作时都会发出大量的热量,必须要用风扇降温。同时
主动降噪又升级,南卡A2主动降噪耳机来了主动降噪又升级,南卡A2主动降噪耳机来了近日,大佬发现一款宝藏耳机,那就是南卡主动降噪耳机升级款的南卡A2,来和朋友们说一下功能体验。朋友们顺便点个关注我,会经常不定期更新数码新品
美国商务部调查显示美企关键芯片库存不足五天华尔街日报1月26日报道,美国商务部周二援引一项新的调查结果说,美国制造商和其他使用半导体的公司的关键芯片库存已降至不足五天。根据美国商务部的报告,2019年美国公司通常保持40天
从比特币看金融资本的赚钱路数比特币堪称史上最跌宕起伏的财富经历,也是人类有史以来在金融界最极致的玩法。2020年12月,比特币冲破了单枚50000美元的大关,即使到了2022年1月25日,单枚价格仍高达330
存储绿色新能源来源人民网人民日报在沙特阿拉伯红海海岸,一座新城正在打造,被称为新一代的城市,未来其电力供应将完全来自新能源。这一愿景的实现,不仅仅依靠成片的太阳能光伏板,还有能源的蓄水池调节器储