第 18 题(数组):题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始,每次从这个圆圈中删除第 m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除第 m 个数字.求出在这个圆圈中剩下的最后一个数字. 思路:看到这道题,直觉是不难,模拟一下过程就好了.我用的是数组来表示的,用first表示当前第一个数字是哪一个数,若删除一个数字则将后面的数字平移到前面. /* 第 18 题(数组): 题目:n 个数字(0,1,…,n…
题目: n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字). 当一个数字删除后,从被删除数字的下一个继续删除第m个数字. 求出在这个圆圈中剩下的最后一个数字. 我的思路: 这是个很经典的环形问题,最优的方案时间复杂度是O(n):先构建递推公式,再使用循环或者递归都能轻松求解, 网上的教程很少能把这个递推公式的由来描述清楚,所以我在这里加入我的一些理解. 由于我们要求解的是n个元素,第m个数字,要找到最后…
package 华为机试; //C++ 输入:由数字和字母组成的字符串,例如:333aaabb55ppin //输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aabb55pin. //这句话的核心就是在字符串删除一些字符,感觉处理很复杂,删除哪些字符呢?我们观察发现, 本字符串中删除了一个3,一个a,一个p,满足的规则是啥呢? 333中删除最后一个3,3aa删除了一个a,5pp中删除一个p, //规则就是如果这个字符前面2…
29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整数都是不相等的. 比如输入的 push 序列是 1.2.3.4.5,那么 4.5.3.2.1 就有可能是一个 pop 系列.因为可以有如下的 push 和 pop 序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的 pop…
30.在从 1 到 n 的正数中 1 出现的次数(数组)题目:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数.例如输入 12,从 1 到 12 这些整数中包含 1 的数字有 1, 10, 1 1 和 12, 1 一共出现了 5 次. 思路:如1121 判断 千位 1出现了多少次:10000 有 0 个 有0个完整的 1000次千位 1, 千位数为1,说明本次千位还没有走完 后面的数字为 121 说明本次千位1走了 122个判断 百位 1出现了多少次:1000 有…
第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎没有必要. 对每一个字符,都依次和后面的比较,若出现了两次,则检查下一个字符,遇到只出现一次的,直接输出就好了. /* 第 17 题(字符串): 题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 分析:这道题是 2006 年 google 的一道笔试题. */…
package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例输出:0 * Java版本 */ /* * 个人总结: * (1)语法上Java的输入Scanner使用 * (2)char[] arr=mxf.toCharArray()的使用,将输入的字符串转成字符数组:这样就可以一个 * 一个的遍历 * (3)算法上,这里使用了经典的入栈和出栈的思想 * */…
php实现 提取不重复的整数(编程题目能够最快的熟悉函数) 一.总结 一句话总结:编程题目能够最快的熟悉函数. 1.字符串反转函数? 没有str_revserse,有arr_reverse,这里是strrev 3 $num=strrev($num); 2.字符串分割函数(按固定字符)? str_split() 4 $arr=str_split($num,1); 3.数组转化为字符串函数? implode() 6 $ans=implode($arr); 二.提取不重复的整数 题目描述 输入一个in…
转自:http://blog.csdn.net/vast_sea/article/details/8167968 看上去似乎任何已知的算法都无法做到,如果谁做到了,那么所有的排序方法:QuickSort,ShellSort,HeapSort,BubbleSort等等等等,都可以扔掉了,还要这些算法干吗阿,呵呵.不过实际上,在数字范围有限制的情况下,是有一个这样的算法的,只需要用一个数组记录每个数字出现次数就可以了. 假定你的数字范围在0到65535范围之内,定义一个数组count[65536](…
32.(数组.规划)有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序:要求:通过交换 a,b 中的元素,使[序列 a 元素的和]与[序列 b 元素的和]之间的差最小.例如: var a=[100,99,98,1,2,3];var b=[1,2,3,4,5,40]; 首先,目标一定是先找到n个数字,使得数字和比总和的一半小,但是最接近. 思路一:开始看这道题跟之前学的动态规划很像,就想用动态规划来解.但是....做不出来........... 必须要选一半的数字让我头都大了. 思路二:…