
算法分析
文章平均质量分 58
lsjweiyi
足够折腾
展开
-
离线程序激活功能实现思路第二版(ts实现)
之前做过,后面再次实践时,发现有改进空间。原创 2024-02-25 18:28:47 · 769 阅读 · 0 评论 -
让离线程序也需要输入校验码(激活码)才可使用(python实现)
我遇到个需求:需要给离线程序加一道锁,防门外汉的那种。因为离线程序遇到高手,肯定是会被破解的。像IntelliJ全家桶这样超大型软件,都无法防止用户的暴力破解。何况我这小打小闹的玩意。所以,目的就是防止一些普通的程序员也能轻易破解软件。实现效果假设已经开发了一个桌面应用“test.exe”(该软件不联网),那么每次安装程序的时候,都需要输入验证码(激活码)才能安装,该激活码需要向软件所有者索要。从而达到了防止程序被随意拷贝安装使用的目的。那么验证码如何才能实现实时更新且由软件所有者提供呢?实现方法原创 2021-09-19 17:34:51 · 4039 阅读 · 2 评论 -
求勾股数元祖(java)
一道华为笔试题,这道题思路挺简单的,符合简单题的属性。但是我却AC不了,包括现在我也没看出来漏了什么。最后通过50%的用例,剩下的百度也没找到原因。先记录一下吧。数字<10000,所以用int型就够了,所以剩余用例和这个无关,题目还要求输出要排序,我看了下我的输出,应该也是符合条件的。无奈/** * @version 1.0.0 * @auth lsjweiyi * @date 2021/8/15 */public class Main3 { public static voi原创 2021-08-19 23:42:15 · 1303 阅读 · 2 评论 -
四则运算算法实现(java)
是一道笔试题,这道题居然被分为简单题。我是觉得真不简单,还是能力太差。看了解析后,知道要用几个关键点:用到栈,先进后出用到递归,遇到做括号就递归减法当成加负数处理遇到乘除出栈计算后再入栈,栈中只有加法但是看完被人的分析,知道了要用什么东西,依然觉得很难,太多细节要处理了,花了整整一晚上才写出来,也不知道有没有bug。要求运算包括加减乘除和括号“()”、"[]"和“{}”。还有负数。要求计算值。这个就不属于简单四则运算了,算复杂的了。当然,这里为了简化运算,保证所有数字都为整数,所以我全部原创 2021-08-19 23:32:24 · 1593 阅读 · 1 评论 -
俄罗斯套娃问题(Java)
问题,输入:第一行 n ,表示有n个套娃。之后n行,每行两个整数:分别表示宽和高。 只有宽和高都大于的才能嵌套。 输出:嵌套的最大层数。一道笔试题,当时还不会LIS算法(最大上升子序列),没什么头绪,回了LIS就很简单了。 LIS算法分析:http://blog.youkuaiyun.com/lsjweiyi/article/details/70871825两种方法:第一种:package RussiaP原创 2017-04-27 21:08:12 · 3841 阅读 · 2 评论 -
最大上升子序列LIS(Java)
原文:http://www.cnblogs.com/Qmelbourne/p/5885648.html有字符串str=”512487561”;先转化成char[] ch=str.toCharArray();定义int[] length=new int[ch.length]; 思路是:以ch[i]结尾的最大上升子序列的长度存放在length[i]中。可以想象: for (int i =转载 2017-04-27 18:26:34 · 1159 阅读 · 0 评论 -
字符串匹配(Java)
阿里笔试的一道题,当时没时间没做出来,现在补一下。 或许他的考点在正则表达式,不过这样有点太简单了(考场上那么久没用过正则表达式,还真写不出来,毕竟闭卷),所以我就自己写了个匹配算法,具体题目是: 第一行输入一个需要进行匹配的字符串,第二行输入匹配模板。成功匹配就返回1,否则返回0。 其中规定两种特殊符号:‘?’表示任意一个字符,‘*’表示一个或多个任意字符,其余字符均为普通字符。正则表达式简原创 2017-05-17 15:55:59 · 1191 阅读 · 0 评论 -
求一元和二元多项式结果
形如f(x)= a0+a1x+a2x+…+an-1x+anx,为一元多项式,当给定x后,求f(x)。系数矩阵为一维数组array[] ={a0,a1,a2,a3········,an}(顺序一定) 传统方式,先写一个x的n次幂的函数,然后主义与系数相乘,求和。代码如下: //求x的N次幂 private static double power(double x,int times){原创 2017-05-26 15:35:49 · 992 阅读 · 0 评论 -
最大公共子串LCS(Java实现)
转至:http://blog.youkuaiyun.com/earbao/article/details/50424948 这篇文章讲的听清楚了,根据他的思路,我自己写了一遍代码,并放弃考虑有多个答案的情况。public class Lcs { public static String longest(String s1,String s2){ char ch1[]=s1.toCharA转载 2017-04-23 15:34:47 · 2500 阅读 · 0 评论 -
求最大不重复子串(Java)
一个经典问题,就是求字符串中不包含重复字符的最大子串。如果有多个这样的子串,则输出第一个。 我的思路其实也就是从头比较到尾来找,只是中间加了一些判断条件进行了优化。具体流程(先转化成char[] ch): 1、假设该最长子串的首字符为chi,则找到ch[i]==chj.此时”j”也就确定了该子串有可能的最大长度了。 2、进一步确定该子串的长度,也就是要确定从ch[i]起,“j”长度的子串里有没原创 2017-04-20 13:26:49 · 3744 阅读 · 0 评论 -
N进制转M问题(理论上没有限制)
很经典的问题,自己动手写了一遍代码。 不同的是,我没有采取字母代替高进制数的做法(如16进制用字母abcdefg表示数字),而是采取 用多位数表示数字,如16进制里20表示为:01 04,16则表示为01 00,17表示为0101。以此类推,而对于101-1000进制的数,则用三位数表示,如001 057。 这样做就可以表示进制很大的数了。理论上,这种做法只受限于整形最大值,当然如果换成数组或者原创 2017-04-06 18:20:52 · 956 阅读 · 0 评论 -
两字母交叉最少问题
问题:假设某字符串str=“ABBBA”,只由字母A,B组成,且无规律,只要求长度大于0,长度合理范围内不限。 str1=”ABBBA”,不同字母之间接触的次数是2次;str2=”ABABA”,不同字母之间接触的次数是4次;str1=”ABBAA”,不同字母之间接触的次数是2次; 要使接触的次数最少,就要移动字母,比如str2=”ABABA”,相邻的两个字母互换一次,也就是移动一次,并且只有相邻原创 2017-04-05 21:40:55 · 945 阅读 · 0 评论 -
求数组里不存在的最小正整数
题目: 给定一个长度为N整形数组a[],所有数据为正整数,且允许重复。要求寻找数组中不存在的最小正整数。最初的思路是对数组进行排序,然后再从1开始比对,那个数没出现,它就是答案。这样做效率太低,然后想了另一种办法。 利用哈希表,定义一种关系:定义一个大小为(N/32+1)的整形数组b,因为一个整形数据有32位,假设b[0]的第一位是1,第二位是2,·····,所以b[0],就可以存储1-32。此原创 2017-03-24 11:14:18 · 2302 阅读 · 3 评论 -
取自然数中的素数几种算法
ACM中的经典问题。网上看了大神的的各种算法,整理一下。 主要参考:http://blog.youkuaiyun.com/once_hnu/article/details/6302283 http://blog.youkuaiyun.com/liukehua123/article/details/5482854(这篇博文里有几处错误,可以看下面的评论) 感谢大神提供的思路。一下代码均为原创 2017-01-10 14:47:56 · 710 阅读 · 0 评论 -
一个整数可以由其他若干个连续整数的和表示(java)
题目的具体描述: 一个整数N,他可能等于比它小的若干个整数(大于2)相加。如果存在这样的连续整数,将他们输出,如果没有则不输出。 例: 整数18,18=5+6+7=3+4+5+6。所以输出[5 6 7],[3 4 5 6]。这是一个公司给出的笔试编程题,当时我没做出来,当时一直在想总结规律,写出效率很高的代码,结果最后连一个可行方案都写出来。值得反思,当时时间有限,应该先写一个可原创 2017-03-19 13:41:35 · 7693 阅读 · 1 评论 -
24点计算器算法
这是一个经典问题,具体问题:从1-13的整数里,选择四个数字,允许重复,并运用+,-,*,/,()对这四个数字进行运算,如果答案等于24,则输出“yes”,否则输出“no”。最开始以为能找到规律,但是想了很久,实在无果,查资料发现好像确实没有成熟的算法。就直接暴力算法,因为其实复杂度并不高,没有多少优化的必要性。顶多加上一些判断,减少循环的次数。我采用递归的方式写了一个Java的程序:原创 2017-03-30 23:31:43 · 9161 阅读 · 0 评论 -
输出4个整数(不重复)的所有排列组合
这是一个经典问题,具体问题:从1-13的整数里,选择四个数字,允许重复,并运用+,-,*,/,()对这四个数字进行运算,如果答案等于24,则输出“yes”,否则输出“no”。最开始以为能找到规律,但是想了很久,实在无果,查资料发现好像确实没有成熟的算法。就直接暴力算法,因为其实复杂度并不高,没有多少优化的必要性。顶多加上一些判断,减少循环的次数。我采用递归的方式写了一个Java的程序:原创 2017-03-30 22:10:41 · 25448 阅读 · 2 评论