
算法
Juno99
这个作者很懒,什么都没留下…
展开
-
LeetCode169.多数元素、229.求众数II、JZ28出现次数超过一半的数字
JZ28.出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。LeetCode169.多数元素题目描述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出:原创 2020-09-13 19:31:45 · 402 阅读 · 0 评论 -
关于二进制存储以及位运算符的一些Tips
二进制存储数字在计算机当中是以二进制的形式来进行存储的。比如说,我们都知道,int型的取值范围为-2147483648到+2147483647,即 -231~(231-1),为什么呢?这是因为,计算机中规定int型的存储空间为4个字节,也就是32位,考虑到数字有正负之分,所以取最高位作为符号位,0表示正数,1表示负数,剩下31位为数值位。而正数和负数在数值位上的表示也有不同。正数在计算机中是以原码的形式存储的,即最小正整数为1(0-000 0000 0000 0000 0000 0000 0000原创 2020-08-29 17:16:41 · 583 阅读 · 0 评论 -
JZ11:二进制中1的个数
题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。解题思路搬运牛客网题目评论里一个巨牛的解题思路:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8?f=discussion如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会原创 2020-08-28 08:46:45 · 228 阅读 · 0 评论 -
JZ48:不用加减乘除做加法
不用加减乘除做加法剑指Offer上遇到的一个题,还蛮有意思的。算法描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题思路:看到不用四则运算符号的时候第一反应就是将其转化为二进制的位运算。在计算机中,整数n是用补码进行存储的【补码:如果n为正数,则原码=反码=补码,如果n为负数,则补码=反码+1】。s=a+b其实就是a和b的补码无进位和+进位的结果,其中,无进位和为a+b补码的异或运算结果,进位为两数补码的按位与运算结果左移一位。举例说明:对于2(010)+ 4原创 2020-08-07 08:31:35 · 414 阅读 · 0 评论 -
m着色问题(回溯算法)
算法思想:将图形转换为无向连通图,若两点之间相邻,则判断颜色,颜色相同则退出,若能到达最后一个点,则说明有一种涂色方案,count便加1.#include#define m 4#define n 5int count =0;int mar[n][n] = {{0,1,1,1,0},{1,0,1,1,1},{1,1,0,1,0},{1,1,1,0,1},{0,1,0,1,0}};//0表示原创 2017-11-23 16:35:26 · 1398 阅读 · 0 评论 -
39级台阶问题(回溯算法)
小明看完电影《第39级台阶》,离开电影院的时候,他数了数视觉的台阶数,恰好是39级。 站在台阶前,他突然又想起一个问题:如果我每一步只能迈上1个或2个台阶,先迈左脚,然后左右交替,最后一步迈右脚,也就是说一共要迈偶数步。那么,上完39级台阶,有多少种不同的上法呢?算法思想:决策树,可以说是非常简单了,分析就不必了吧~#include//初始化 int原创 2017-11-23 18:06:15 · 1578 阅读 · 1 评论 -
布线问题(回溯法)
#include#define n 3int a[n][n] = {{0,2,3},{2,0,3},{3,3,0}};int result[n] = {0,1,2};int answer[n];int minValue=9999;int temp,tempValue;void dfs(int t){ if(t==n){ tempValue = 0; for(int i原创 2017-12-13 10:09:26 · 2600 阅读 · 1 评论 -
无和集问题(回溯)
问题描述: 设S 是正整数集合。S 是一个无和集,当且仅当x,y属于S, 蕴含 x+y不属于S。 对于任意正整数k ,如果可将 {1,2,...,k}划分为n个无和子集S1,S2,...,Sn,称正整k 是n可分的。记 F(n)=max{ k | k 是n可分的}。 试设计一个算法,对任意给定的n,计算 F (n ) 的值。 编程任务: 对任意给定的n,编程计算 F (n原创 2017-11-27 16:45:05 · 7400 阅读 · 3 评论 -
素数环问题(分支限界法)
问题描述: 把整数1~n填写到一个环中,要求每个整数只能填写一次,并且相邻两个数的和为素数。素数是只能被1和自身整除的整数。参考代码如下:#include#includeint n;int arr[100]; int prime(int t){ int i; for(i=2;i<sqrt(t);i++){ if(t%i==0) retur原创 2017-12-18 19:05:02 · 725 阅读 · 0 评论 -
数独游戏(回溯算法)
蓝桥杯校内选择赛第6题,原题如下:你一定听说过“数独”游戏。如下图所示,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。本题的要求就是输入数独转载 2017-11-23 17:46:00 · 4160 阅读 · 1 评论 -
会场安排问题
问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。编程任务:对于给定的k个待安排的活动,编程计算使用最少会场的时间表。数据输入:由文件或键盘给出输入数据。第一行有1 个正整数k,表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动开始时间和结束时间。时间以0 点开始的分钟计。结果输出:将原创 2017-11-16 22:14:25 · 1060 阅读 · 0 评论 -
0-1背包问题(回溯+暴力)
背包问题是算法中的经典问题,可以用许多种方法来求解。一、基于暴力搜索的背包求解。 假设有n个物体,价值和重量分别用vi和wi来表示,用暴力搜索,我们将最终的解用一个向量来表示,因此所有的解空间可以用00...00到11...11来表示。而这些数恰对应0至2^n-1的二进制转换。因此可以基于该思想,利用二进制转换进行暴力搜索。#include #include原创 2017-11-16 22:04:12 · 1049 阅读 · 0 评论 -
汽车加油问题(贪心算法)
一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。对于给定的n(n 要求:输入:第一行有2个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。输出原创 2017-11-18 19:46:21 · 2698 阅读 · 0 评论 -
最小长度电路板排列问题(回溯)
题目描述:最小长度电路板排列问题算法思想:排列树问题。对所有的电路板进行全排列,每次找到连接块的最左和最右电路板,相减得到连接块的长度,在全排列的过程中找到最小长度。参考代码如下:#include#includeint n,m;int **arr;int *a;int minlength=100000,templength;int left,right;int *opt原创 2017-11-28 19:28:28 · 8269 阅读 · 1 评论 -
运动员最佳配对问题(回溯)
羽毛球队有男女运动员各n人。给定2个n×n 矩阵P和Q。P[i][j]是男运动员i和女运动员 j配对组成混合双打的男运动员竞赛优势;Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势;由于技术配合和心理状态等各种因素影响,P[i][j]不一定等于Q[j][i]。男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]* Q[j][i]。设计一个算法,计算男女运动员最佳配对原创 2017-11-28 20:31:38 · 17547 阅读 · 2 评论 -
最小重量机器设计问题(回溯)
问题描述: 设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设 wij 是从供应商j 处购得的部件i的重量,cij 是相应的价格。试设计一个回溯算法,对于给定的机器部件重量和机器部件价格,计算总价格不超过c的最小重量机器设计。算法思想: n层m叉子集树问题。部件有n个,供应商有m个,分别用w[i][j]和c[i][j]存储从供应商j原创 2017-11-28 21:30:15 · 6655 阅读 · 2 评论 -
蓝桥杯_李白喝酒问题(回溯+暴力)
#include#includeint wine=2;int shop=0;int flower=0;int count1=0;int count2=0; void traceback1(int t){ if(t==14){ if(wine==1&&shop==5&&flower==9){ count1++; } return ; } if(shop<5){原创 2017-11-15 17:51:48 · 1456 阅读 · 0 评论 -
最优分解(贪心算法)
#include#includeint main(){ int n,i,sum=0; int diff,result,j=0; scanf("%d",&n); int *arr = (int*)malloc(n*sizeof(int)); for(i=2;i<n;i++){ if((sum+i)<=n){ sum+=i; arr[j]=i; j++; }原创 2017-11-15 17:54:32 · 1245 阅读 · 0 评论 -
n皇后问题
在n*n的棋盘上放置彼此不受攻击的n个皇后,按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n*n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。n皇后问题可以用暴力求解,同时也是回溯法应用的一个经典案例参考代码如下:#include //回溯+暴力 #includeint count1=0;in原创 2017-11-16 21:53:31 · 1272 阅读 · 0 评论 -
最优服务次序问题(贪心算法)
一、最优服务次序问题问题描述:设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待直到完成服务的时间总和除以n。编程任务:对于给定的n个顾客需要的服务时间,编程计算最优服务次序。Input测试数据第一行是正整数n(nOutput原创 2017-11-18 19:23:10 · 11822 阅读 · 0 评论