
Algorithm
算法记录
wohu007
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
位运算符 &、|、^ 的应用
位运算符的应用奇数二进制数末尾位为 1;偶数二进制数末尾位为 0;#include <iostream>int main(){ int a = 16; int b = 1; int flag = (a & b); if (flag) { std::cout << " a 奇数" << std::endl; } else { std::cout &原创 2022-08-24 22:19:56 · 687 阅读 · 1 评论 -
只使用 ++ 操作符实现加减乘除运算
1. 问题分析加法操作要实现 a+b 的基本思路就是对 a 执行 b 次 ++ 操作即可。减法操作要实现 a-b 的基本思路就是不断地对 b 执行 n 次 ++ 操作,直到等于 a 为止,记录这个过程中的操作次数。乘法操作要实现 a*b 的基本思路就是对 a 执行 b 次相加就能得到 a*b 的值。除法操作要实现 a/b 的基本思路为:利用之前的乘法操作,对 b 不断乘以 1,2,3,4… n,直到相乘结果 b*n > a 时,就能得到商为 n-1。2. 代码实现...原创 2022-04-01 23:15:00 · 507 阅读 · 0 评论 -
有效完全平方数和求平方根的多种解法
给定一个 正整数 num (1 <= num <= 2^31 - 1),编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。1. 解法一使用库函数,求得 sqrt(num),然后遍历 1 到 sqrt(num) 数字,分别相乘与 num 比较class Solution {public: bool isPerfectSquare(int num) { for(int i=1;i<=sqrt(num);i+.原创 2022-03-29 22:45:00 · 1148 阅读 · 0 评论 -
计算一个数的 N 次方的多种解法
1. 问题实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n )。其中:-100.0 < x < 100.0-2^31 <= n <= 2 ^31-1-10^4 <= x ^n <= 10 ^ 42. 思路方法一方法二原创 2022-03-30 23:00:00 · 10263 阅读 · 1 评论 -
差分法的应用
【例题】循环输入,每组数据给定 n (n<=10^5),然后 n 个整数 ai(ai<=100)。再给出一个 m (m<=10^5),然后 m 对整数 l,r (l<=r),对于每对整数输出一个数代表 al 和 ar 的数字之和int main(){ int n; std::cout << "input num of n" << std::endl; while(std::cin>>n) { .原创 2022-03-23 13:50:42 · 268 阅读 · 0 评论 -
HJ107 二分法求求解立方根
描述计算一个数字的立方根,不使用库函数。保留一位小数。输入描述:待求解参数,为double类型(一个实数)输出描述:输入参数的立方根。保留一位小数。#include <iostream>#include <iomanip>#include<cstdio>int main(){ double d; std::cin >> d; bool flag = false; if(d < 0)原创 2021-08-14 17:37:56 · 346 阅读 · 0 评论 -
HJ86 求最大连续bit数
描述求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1本题含有多组样例输入。输入描述:输入一个byte数字输出描述:输出转成二进制之后连续1的个数示例1输入:35输出:21说明:3的二进制表示是11,最多有2个连续的1。5的二进制表示是101,最多只有1个连续的1。#include <iostream>int main(){ int byte; while(std::cin&原创 2021-08-17 20:05:50 · 217 阅读 · 0 评论 -
C++ OJ 中多行数据输入(大小写转换、通过移位运算实现2的n次方、多组输入,每行输入数量不一样)
求整数个位数字之和while (cin >> a) { c = 0; for (int i = 1; (i < 11)&&(a != 0); ++i) { c += a % 10; a = a / 10; } cout << c << endl;}while(cin>>a>>b) 主要解决的是两个为一组的多组数据输入,当一次只输入一个数据.原创 2021-07-30 22:25:37 · 997 阅读 · 0 评论 -
求最大公约数 和最小公倍数
1. 问题【例题】循环输入,每组数据给定两个非负整数 a,b,求两者最大公约数2. 思路3. 实现#include <iostream>/********************************************************** 【例题】循环输入,每组数据给定两个非负整数 a,b,求两者最大公约数**********************************************************/int gcd(int a, i原创 2022-03-27 23:00:00 · 511 阅读 · 0 评论 -
二进制 y 位变为 y+1位
循环输入,每组数据给定两个数 x,y,输出 z 的值,其中 z 的定义为 x 二进制位从低数的第 y 位变成 y+1 位的值#include <iostream>/********************************************************** 【例题】循环输入,每组数据给定两个数 x,y,输出 z 的值,其中 z 的定义为 x 二进制位从低数的第 y 位变成 y+1 位的值**********************************.原创 2022-03-23 22:30:00 · 261 阅读 · 0 评论 -
HJ6 质数因子
描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )最后一个数后面也要有空格输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入:180输出:2 2 3 3 5#include <iostream>int main(){ long int n; while(std::cin >&g原创 2021-08-12 20:17:39 · 165 阅读 · 0 评论 -
判断 2 的幂次方、3 的幂次方、4 的幂次方
1. 2 的幂次方给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。2 的 N 次方的二进制必然为 10,100,1000,1000…0 类似的,所以只需要将该整数的二进制表示法与它减 1 的二进制表示法进行与操作,结果为 0 的必然为 2 的 N 次方。class Solution {public: bool isPowerOfTwo(int n)原创 2022-03-28 22:15:00 · 1442 阅读 · 0 评论 -
HJ75 公共字符串计算
描述给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。输入描述:输入两个只包含小写字母的字符串输出描述:输出一个整数,代表最大公共子串的长度示例1输入:asdfaswerasdfaswer输出:6示例 2输入:bacefaebcdfabfaadebdaacabbdabcfffbdcebaabecefddfaceeebaeabebbaddedcecfbbbecaffe原创 2021-08-10 20:16:23 · 337 阅读 · 0 评论 -
HJ5 进制转换
描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。输入描述:输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子https://www.nowcoder.com/discuss/276处理多组输入的问题。输出描述:输出该数值的十进制字符串。不同组的测试用例用\n隔开。示例1输入:0xA0xAA输出:10170#include <iostream>#include <string>#include &l原创 2021-08-13 20:02:21 · 447 阅读 · 0 评论 -
如何不使用循环输出 1 到 100 和 不使用 * 实现两数相乘【递归实现】
1. 问题实现一个函数,要求再不使用循环的前提下输出 1 ~ 1002. 思路很多时候循环可以使用递归来实现,所以只要设置好递归的截止条件就可以。3. 实现#include <iostream>void output(int n){ if (n <= 100) { std::cout << n << std::endl; output(++n); }}int main(){原创 2022-03-31 23:00:00 · 1182 阅读 · 0 评论 -
求丢失的那个数
循环输入,每组数据输入一个 n,然后再给定 n-1 个数,分别代表 1-n 的其中 n -1 个,求丢失的那个数int main(){ int n; int x; while (std::cin >> n) { int ret = 0; for (int i = 1; i <= n; i++) { ret ^= i; } for (int j = .原创 2022-03-22 22:00:00 · 179 阅读 · 0 评论 -
无冲突的哈希表问题 | 不排序递增输出所有数
【例题】循环输入,每组数据为 一个 n (n<=10^5), 然后 n 个数 ai(0<=ai<=10^6),要求不进行排序,递增有序输出所有数const int MAX = 1000000;int main(){ int n; while (std::cin >> n) { int x; int b[MAX] = {0}; for (int i = 0; i < n; i++) .原创 2022-03-25 22:45:00 · 438 阅读 · 0 评论 -
求数组连续最大和(暴力求解和动态规划)
1. 问题一个有 n 个元素的数组,这 n 个元素既可以是正数也可以是负数,数组中连续的一个或者多个元素可以组成一个连续的子数组,一个数组可能有多个连续的子数组,求子数组的最大值。如数组 [1, -2, 4, 8, -4, 7, -1, -5] 其最大和的子数组为 [4, 8 -4, 7],最大值为 15。2. 思路实现2.1 暴力法依次遍历生成所有子数组,并求出子数组的和,然后取最大值就是题目要求。package mainimport ( "fmt" "math")func g原创 2022-04-18 21:00:00 · 455 阅读 · 0 评论 -
数组按位置旋转(循环移位)
1. 问题给定一个数组,按照给定的索引位置旋转,如数组 a = [1,2,3,4,5,6,7,8,9],按照给定索引位置 4 翻转后,输出为 [6,7,8,9,1,2,3,4,5]2. 思路2.1 可以直接利用切片索引性质求解a = [1,2,3,4,5,6,7,8,9],先计算出 a[5:]=[6,7,8,9],再计算 a[:5]=[1,2,3,4,5],然后用 append() 完成。2.2 先交换子数组再交换整个数组按照索引位置将原始数组分为两组,a = [1,2,3,4,5,6,7原创 2022-04-14 22:39:46 · 764 阅读 · 0 评论 -
查找数组元素最大值和最小值(分治法)
1. 问题给定一个数组,要求找出数组中的最大值和最小值,假设数组中的值两两各不相同2. 思路2.1 首元素比较法定义变量 max、min , 分别将第一个元素分别赋值给这两个变量,然后依次遍历数组中的全部元素,如果比 max 大就将该元素赋值给 max, 如果比 min 小就将该元素赋值给 min 。遍历结束 max 和 min 就分别为最大值和最小值。2.2 分治法分治法就是将一个规模为 n 的、难以直接解决的大问题,分割为 k 个规模较小的子问题,采取各个击破、分而治之的策略得到原创 2022-04-13 22:26:53 · 6656 阅读 · 0 评论 -
查找数组中出现奇数次的 2 个数(哈希法和异或法)
1. 问题数组中有 N+2 个数,其中, N 个数出现了偶数次,2 个数出现了奇数次(这两个数不相等),使用 O(1) 的空间复杂度,找出这个数。不需要知道具体位置,只需要找到这两个数即可。2. 思路2.1 hash 法2.2 异或法https://blog.youkuaiyun.com/weixin_45604257/article/details/105295046https://blog.youkuaiyun.com/linulizainulio/article/details/122717454...原创 2022-04-16 17:36:48 · 689 阅读 · 0 评论 -
求集合的所有子集
1. 问题有一个集合,求其全部子集,包含自身。如给定一个集合 s,它包含两个元素 [a,b],则其全部的子集为 <a,ab, b>2. 思路采用迭代法计算过程如下:假设原始集合元素为 [a,b,c,d] ,子集结果为 r,则第一次迭代元素为 a 迭代结果为:r = [a]第二次迭代元素为 b 迭代结果为:r = [a, ab, b]第三次迭代元素为 c 迭代结果为:r = [a, ab, b, ac, abc, bc, c]第四次迭代元素为 d 迭代结果为原创 2022-04-17 21:00:00 · 1188 阅读 · 0 评论 -
给定一个 n X n 的矩阵,求它的转置矩阵
【例题】循环输入,每组数据先输入一个 n(n<=10),然后 n 行 n 列数据代表一个矩阵,每个数据为一个整数,输出它的转置矩阵。对于转置矩阵其实就是上三角元素元素 a[i][j] 和下三角元素 a[j][i] 互换,其中 j > i。#include <iostream>const int MAX = 10;int input_matrix(int a, int b, int M[MAX][MAX]){ std::cout << "input .原创 2022-03-24 22:30:00 · 2251 阅读 · 0 评论 -
对有大量重复数字的数组进行排序(哈希表应用)
1. 问题给定一个数组,已知这个数组中有大量的重复数字,如何对这个数组进行高效地排序2. 思路常规排序法没有用到大量重复数字这个特性,应该想到用 hash 表来解决这个问题3. 代码实现package mainimport ( "fmt" "sort")func sortArr(a []int) []int { d := make(map[int]int) // key 用于存储原始数组的 value 值 unique := make([]int, 0) // 原始数组经原创 2022-04-15 22:45:00 · 841 阅读 · 0 评论 -
从三个有序数组中找出它们的公共元素
1. 问题给定以非递减顺序排序的三个数组,找出这三个数组中的所有公共元素,例如下面三个数组 s1=[2,5,12,20,45,85], s2=[16,19,20,85,200],s3=[3,4,15,20,39,72,85,190] ,那么这三个数组的公共元素为 [20, 85]...原创 2022-04-16 22:45:00 · 1038 阅读 · 0 评论 -
查找数组中唯一重复的元素和查找数组中丢失的数(哈希法和异或法)
1. 问题假设数组元素为分别为 1-N,一共 N+1 个,其中只有一个元素重复出现,其它元素只出现一个,找出这个重复的元素2. 思路2.1 使用 Hash 方法将出现的元素依次放到一个 hash 表中,每个元素值作为 hash 的 key ,每个元素出现的次数作为 hash 的 value,初始状态默认 value 为 0,元素每出现一次加 1,当为 2 时表示这个元素出现过两次。2.2 使用 异或方法每个数字与 0 的异或结果为它本身每个数字与自身的异或结果为 0异或满足交换原创 2022-04-12 22:31:27 · 638 阅读 · 0 评论 -
给定一个 n X n 的矩阵 和 R,求旋转 90 X R 度以后的矩阵
【例题】循环输入,每组数据先输入一个 n(n<=10),然后 n 行 n 列数据代表一个矩阵,每个数据为一个整数,然后再给出一个数字 R,输出这个矩阵按照顺时针旋转 90 X R 度以后的矩阵。const int MAX = 10;int input_matrix(int a, int b, int M[MAX][MAX]){ for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++.原创 2022-03-24 21:48:51 · 691 阅读 · 0 评论 -
求两个矩阵乘积
1. 题目【例题】循环输入,每组数据总共输入两个矩阵,每个矩阵先输入 n 和 m,然后再输入一个 n x m 的矩阵,输出这两个矩阵的乘积,如果不存在则输出 NULL2. 解法#include <iostream>/********************************************************** 【例题】循环输入,每组数据总共输入两个矩阵,每个矩阵先输入 n 和 m, 然后再输入一个 n x m 的矩阵,输出这两个矩阵的乘积,如果不存在则输原创 2022-03-21 23:45:00 · 1192 阅读 · 0 评论