php算法代码,emoji表情换成自己喜欢的就行post请求api源码<?php//可以封装成以下的API代码,接受GET请求,参数包括://action:指定API动作,encode表示加密,decode表示解密;//content:需要加密或解密的字符串,使用urlencode编码;$miyu=['表情1','表情2','表情3','表情4','表情5','表情6','表情7','表情8','表情9','表情10'];functionencode($str,$miyu){$code=null;$hexArray=str_split_unicode(bin2hex($str));foreach($hexArrayas$k=>$v){$x=base_convert($v,16,10)+$k%16;if($x>=16){$x-=16;}$code.=$miyu[($x/10)].$miyu[$x%10];}return$code;}functiondecode($str,$miyu){$code=null;$hexArray=str_split_unicode($str);$n=count($hexArray);for($i=0;$i<$n;$i++){if($i%2==0){if(empty($hexArray[$i+1])){break;}$A=array_search($hexArray[$i],$miyu);$B=array_search($hexArray[$i+1],$miyu);$x=(($A*10)+$B)-(($i/2)%16);if($x<0){$x+=16;}$code.=dechex($x);}}returnpack("H*",$code);}functionstr_split_unicode($str,$l=0){if($l>0){$ret=array();$len=mb_strlen($str,"UTF-8");for($i=0;$i<$len;$i+=$l){$ret[]=mb_substr($str,$i,$l,"UTF-8");}return$ret;}returnpreg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY);}functiondaddslashes($string,$force=0,$strip=FALSE){!defined('MAGIC_QUOTES_GPC')&&define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc());if(!MAGIC_QUOTES_GPC||$force){if(is_array($string)){foreach($stringas$key=>$val){$string[$key]=daddslashes($val,$force,$strip);}}else{$string=addslashes($strip?stripslashes($string):$string);}}return$string;}if(isset($_POST['action'])&&isset($_POST['content'])){$action=daddslashes($_POST['action']);$content=daddslashes($_POST['content']);if($action=='encode'){$result=encode($content,$miyu);echojson_encode(array('error'=>200,'data'=>$result,'message'=>'加密成功'),JSON_UNESCAPED_UNICODE);}elseif($action=='decode'){$result=decode($content,$miyu);echojson_encode(array('error'=>200,'data'=>$result,'message'=>'解密成功'),JSON_UNESCAPED_UNICODE);}else{echo'Invalidaction';}}else{echo'Invalidparameters';}?>
Floyd最短路径的算法实现C++#include<stdio.h>#defineINF10000inte[5][5]={0,45,30,INF,50,45,0,INF,60,INF,30,INF,0,INF,45,INF,60,INF,0,55,50,INF,45,55,0};intpath[5][5]={0};voidfloyd(){inti,j,k;for(i=0;i<5;i++)for(j=0;j<5;j++)for(k=0;k<5;k++)if(e[i][k]<INF&&e[k][j]<INF&&e[i][j]>e[i][k]+e[k][j]){e[i][j]=e[i][k]+e[k][j];path[i][j]=k;}}voidgetPath(inti,intj){if(i==j)return;if(path[i][j]==0)printf("%c",j+'a');else{getPath(i,path[i][j]);getPath(path[i][j],j);}}intmain(){charstart,end;printf("输入起点编号和终点编号:");scanf("%c%c",&start,&end);floyd();intm,n;for(m=0;m<4;m++){for(n=0;n<4;n++){printf("%d",path[m][n]);}}printf("最短路径为:%d,具体如下:\n%c",e[start-'a'][end-'a'],start);getPath(start-'a',end-'a');return0;}
某次笔试,但是由于笔试时间冲突,只得快速解决问题,没来得及考虑到性能优化,当时只过了小部分的测试用例,再思考效率影响的地方,重写一下。#-*-coding:utf-8-*-#author:DYBOY#time:2019-9-2012:41:32#desc:求给出数组中一定长区间的和最小,输出最小和的值importsysdefmysum(arr,start,num):returnsum(arr[start:start+num])#第二种方法,求出每段的和,然后比较获得最小和值deflist_segament_sum(arr,num):sum_arr=[sum(arr[0:num])]foriinrange(num,len(arr)):sum_arr.append(sum_arr[i-num]+arr[i]-arr[i-num])returnmin(sum_arr)if__name__=='__main__':line1=input()n,m=(line1.strip()).split()m=int(m)line2=input()line2=list(map(int,line2.strip().split()))min_sum=99999#记录最小和值foriinrange(len(line2)-m):temp_sum=mysum(line2,i,m)iftemp_sum<min_sum:min_sum=temp_sumprint(min_sum)
今天室友面试了,居然挂到了ByteDance的二面,其中考了一个大整数相乘,那么我就尝试借助Python再来写一遍吧!实现思路很简单,平时我们咋计算乘法的,就按照公式计算就好了,程序中就是要考虑好边界条件与此同时,结合一下编程语言的特性,也会使得代码更加精简。#-*-coding:utf-8-*-#author:DYBOY#time:2019-9-2121:53:03#desc:大数相乘#字符串分割为listdefstr_split(strs):str_arr=[]forcharinstrs:str_arr.append(char)returnstr_arr#大数相加defbig_add(a_str,b_str):aa=str_split(a_str)bb=str_split(b_str)sum_str=''c=0whilelen(aa)orlen(bb)orc:try:a=int(aa.pop())except:a=0try:b=int(bb.pop())except:b=0c+=a+bsum_str=str(c%10)+sum_strc=c>9returnsum_str#大数相乘之大数*个位数defsingle_mutipule(a_str,b_char):aa=str_split(a_str)b=int(b_char)sum_str=''c=0whilelen(aa)orc:try:a=int(aa.pop())except:a=0mu=a*b+csum_str=str(mu%10)+sum_strifmu>9:c=int((str(mu))[:-1])else:c=0returnsum_str#大数相乘defmutipule(a_str,b_str):aa=str_split(a_str)bb=str_split(b_str)sums_arr=[]sum_str=''foridx,binenumerate(bb):a_b1=single_mutipule(aa,b)+idx*'0'sums_arr.append(a_b1)forsinsums_arr:sum_str=big_add(sum_str,s)returnsum_strif__name__=='__main__':s1='4174468421068499's2='99861646849'print(mutipule(s1,s2))虽然网上很多大神写了一些特别漂亮的代码,但是一串儿的循环嵌套,数组取值,脑内循环,太猛了此方法将部分计算过程拆分为函数,相信对于大家的理解更有帮助另外补充一句,python的int类型是无限精度的,所以python不需要实现大整数相乘…
直接看代码&注释.box{display:flex;/*还可以设置行内元素的inline-flex*/flex-direction:row;/*主轴水平!:row:列(左至右);row-reverse:列(右至左)主轴竖直!cloumn:行(上至下);column-reverse:行(下至上)*/flex-wrap:nowrap;/*一行放不下的时候:nowrap不换行,wrap换行,wrap-reverse换行第一行在下方*//*flex-flow:rownowrap;是上面两者的简写形式*/justify-content:flex-start;/*定义项目在主轴上的对齐方式flex-start左侧,flex-end右侧,center居中,space-between两端对齐项目间隔相等,space-around项目左右两侧间距相同*/align-items:flex-start;/*定义项目在纵轴上的对齐方式flex-start上,flex-end下,center居中,baseline项目中第一行文字对齐,stretch默认值高度未设置时候将撑满容器高度*/}.item{order:0;/*定义项目的排列顺序,数值越小越靠前,默认0*/flex-grow:0;/*定义剩于空间的放大比例,默认0不放大,如果多个item均为1,则将等分剩于的空间,不同值按照比例分配剩于空间*/flex-shrink:1;/*定义项目缩小比例,默认为1,空间不足,均等比例缩小,为0则不缩小*/flex-basis:auto;/*定义项目在分配剩于主轴空间之前的主轴占据的长度,浏览器会根据这个属性去计算是否有剩于的空间*//*flex:auto;是flex-grow、flex-shrink和flex-basis的简写默认值:01auto*/align-self:flex-start;/*设置单个项目与其他项目不一样的对齐方式,可覆盖父容器设置的align-items,默认auto继承父元素的align-items值auto|flex-start|flex-end|center|baseline|stretch*/}
周末学习设计模式有点上头,遂打开“脉脉”APP放松一下,看到一些老哥吐槽“互联网黑话”的帖子,顺便就写了个“互联网黑话生成器”分享给大家,全篇请带着娱乐精神阅读,请勿对号入座!!!一、起因其中有位老哥反思自己不会互联网黑话,面试惨被拒:首先看看效果:二、实现话生成器还是非常简单,就是把常见的互联网黑话拿出来“随机排列组合”,也是掌握说互联网黑话方法的精髓(我说的!)。2.1OCR这些黑话比较多,找了脉脉上老哥分享的一张图:2.2范本有了“黑话关键词”,要形成完整的一句话还得需要介词,所以找到了“一鸣同学”在九周年上指出的一个双月材料里的一段话:所以我们就按照这个结构来塞入我们的黑话关键词!2.3随机组合分类整理好关键词到数组中2.4效果多生成几个瞅瞅:三、总结为啥生成的句子,看起来还有那么一点点道理呐?实际上,这些词汇大部分都是一些“方法论”,方法论的词语是一些场景的抽象总结,但是介于大家认知的差异,所以会让人理解起来有些难度。正是因为理解有一定的难度,所以在这种融合了多种多样的关键词后,更是加深了理解难度,所以初看还是有那么一点道理。言归正传,“互联网黑话”这个词,实际是对那些滥用方法论的一种讽刺,方法论本身是对一些共性和场景的抽象总结,其本身并无任何问题,大家其实应该有学习一些方法论的必要。学习方法论绝不是为了学会了几个抽象词语,就一通滥用增加B格,而是为了减少团队成员的认知差异,提升团队的沟通效率。可以体验一手“互联网黑话生成器”:
你是否曾对CSS中的百分比单位非常疑惑?是否简单认为百分比的基准值就是所在元素的的宽高?本文将从包含块角度帮助大家理解记忆百分比单位的计算规则,便于巧妙运用包含块规则解决实际开发中的布局问题!一、确立包含块在我们常用的场景中,position的值有relative、absolute、fixed、static,且这四种属性为代表,浏览器对于这四种属性的包含块确立规则如下:值说明absolute绝对定位,包含块就是由它的最近的position的值不是static的祖先元素的内边距区的边缘组成。fixed固定定位,在连续媒体下(continuousmedia)包含块是viewport(视口),在分页媒体(pagedmedia)下的情况下包含块是分页区域(pagearea)relative相对定位,包含块是最近祖先块级元素或格式化上下文static默认值,没有定位,元素出现在正常的流中(忽略top,bottom,left,right或者z-index声明),同relative规则根元素()所在的包含块是一个被称为初始包含块的矩形。他的尺寸是视口viewport(forcontinuousmedia)或分页媒体pagemedia(forpagedmedia).二、百分比值计算规则百分比单位计算基数属性当前属性备注包含块的widthwidth、left、right、padding、margin若包含块position值为relative或static,则当前元素的计算值为auto包含块的heightheight、top、bottom则其值为:包含块height值*当前元素height百分比值三、包含块原理的应用场景自己之前一直有个误区,认为padding、margin的百分比单位的计算基数是当前元素矩形区域宽高来算,但是根据包含块的规则,他们的计算基数应该是包含块的width值。之前团队里大佬洪岩问:“如何实现一个高度是自适应宽度3倍的图片?”实现方法1:利用Chrome浏览器最新支持的aspect-ratio属性,其问题就是C端浏览器兼容性不好.box{aspect-ratio:1/3;//width/height宽高比}aspect-ratio实现方法2:巧用包含块规则(padding和width属性百分比值的计算基数是包含块的宽度)+背景图实现1比3的实现