算法
阁楼猫
这个作者很懒,什么都没留下…
展开
-
算法:求1+2+3+...+n
题目:求1+2+3+…+n要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)如果只是求求1+2+3+…+n这个很简单,利用数学公式就可以计算了 sum=(1+n)*n/2或for循环中 sum += index;java不太好实现,不过c++很容易就搞定了,只用构造函数#include <iostream>using namespa原创 2016-07-10 11:22:30 · 2066 阅读 · 0 评论 -
算法:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 输入: 输入可能包含多个测试样例。 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000)。 输出: 对应每个测试案例, 若输入为一个合法的字符串(即代表一个整数),则输出这个整数。 若输入为一个非法的字符串,则输出“My God”。原创 2016-06-30 22:31:02 · 2742 阅读 · 0 评论 -
算法:特殊二维数组查询key值是否存在
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: {1, 3, 6, 9}, {2, 5, 7, 12}, {6, 10, 14, 18}, {8, 11, 15, 20}}; 行:从上到下递增,列:从左到右递增 选择右上角9位置为参照,如key=9返回找到;原创 2016-06-27 22:31:07 · 1554 阅读 · 0 评论 -
算法:数组找出2个只出现一次的数字(其他元素出现两次)
思路: 1、依然从头到尾异或所有的数字,这样得到的结果实际上就是两个只出现了一次的数字异或的结果, 2、在异或后的结果中找出其二进制中最右边为1的位,该位既然为1,说明异或的两个数字对应的该位肯定不同,必定一个为1,一个为0 3、根据此位是否为1来划分这两个部分,返回为true的元素异或得到一个数字为num1,返回false的所有元素异或的到num2/** * * 数组2个只出现一次的数原创 2016-07-04 22:46:01 · 1085 阅读 · 0 评论 -
算法:字符串旋转
题目:输入一个字符串,逆序输出字符串 例如:i am kity –》 ytik ma ipublic class ReverseDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入字符串"原创 2016-07-17 21:45:55 · 421 阅读 · 0 评论 -
标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
闲来无聊,拿着这个算法题看了下典型的约瑟夫问题。这里使用最直白的方式来解答这道题:思路: 1.把所有人先放入数组中,size为n+1 2.当报到m的人,且dead不等于n-1时,此人退出游戏,这时候把数组中这个值置为0,报数从新开始 3.如果这个人报数等于m,并且已经死了n-1个人,说明当前这个人就是最后的一个public class demo{ public static void原创 2017-03-26 16:09:34 · 3753 阅读 · 0 评论 -
给定一个字符串,求第一个不重复的字符
这个问题有两个关键词 :第一个,不重复第一个 也就是说我们要保证这顺序,使用LinkedHashMap来记录字符个数,因为LinkedHashMap维持的元素顺序与插入顺序一致,而我们正是按照字符串中字符出现的顺序来将字符插入Map中的。 不重复 使用map的value保存计数,每插入一个元素时候给map的value值加1,当我们扫描字符串时,只需要迭代LinkedHashMap并找出值为1的元素原创 2017-03-26 16:16:49 · 2559 阅读 · 0 评论