强烈推荐
41.和为S的连续正数序列

41.和为S的连续正数序列
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence1(int sum) {
ArrayList<ArrayList<Integer>> alllist = new ArrayList<ArrayList<Integer>>();
if(sum < 3)
return alllist;
int small = 1;
int big = 2;
int middle = (1 + sum) / 2;
int curSum = small + big;
while(small < middle){
if(curSum == sum){
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = small; i <= big; i++)
list.add(i);
alllist.add(list);
}
while(curSum > sum && small < middle){
curSum -= small;
small++;
if(curSum == sum){
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = small; i <= big; i++)
list.add(i);
alllist.add(list);
}
}
big++;
curSum += big;
}
return alllist;
}
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
for (int n = (int) Math.sqrt(2 * sum); n >= 2; n--) {
if ((n & 1) == 1 && sum % n == 0 || (sum % n) * 2 == n) {
ArrayList<Integer> list = new ArrayList<>();
for (int j = 0, k = (sum / n) - (n - 1) / 2; j < n; j++, k++) {
list.add(k);
}
ans.add(list);
}
}
return ans;
}
}
作者:Jason分类:【offer】浏览(266)评论(0)
程序员的“二”人世界
世界上每一个程序员都是一个标准二货,彻彻底底完完全全的二货,二的63次方减一,这可是世界上最大的整数了(由此暴露了一个Java程序员的身份),再大就要溢出,它全是由2组成的。计算机是二进制的,计算机是程序员的梦中情人,由此而来程序员的世界就是一个2和情人的世界,从而组成了完美的“二”人世界。
程序员的脑子都是二进制的,他们数数就是2,4,8,16,32,64,128,256,512,1024,…,就像你张口就来的0,1,2,3,4,5,6,7,8,9,10,他们对1024极其敏感,就像你每次买东西都想凑个整数,不管是10还是100. 有一次,一个哥们借我1000块钱,好像过了很久打算还我,但是觉得时间那么长了,有点不好意思,于是就说,给你凑个整给你1024好了,也不差那点钱。
程序员有种职业病,就是看到啥缩写字母都会想到编程语言里的简写。有一次,我们大家在一起讨论一个热播美剧《破产姐妹》,因为剧情尺度确实有点大,而且还需要了解很深的美国文化才能get到他们的笑点,当有人谈论到Max整天挂在嘴边的hang、ball、gc的时候,旁边一哥们不假思索地就问他们也那么积极的垃圾回收么?看来美国文明程度确实很高啊。啥?啥垃圾回收?Garbage Collection啊,一看你就Java基础没学好,回去赶紧恶补Java虚拟机啊。
在程序员眼里,世界上最高尚的职业就是人民教师,从古自今教师都是被世人尊敬的群体,为人师表的教师之所以那么伟大,不就是因为他们每年都有一个属于自己的节----教师节么,其他任何职业都没有这种优厚的待遇吧。但是只有一个例外,10.24是我们程序员的节日(此处应该有2的63次方减一个赞),哈哈哈,大笑三声,独属、专属、唯一的一个属于这个特定职业的节日,虽然没法和过节假日的老师们相提并论,但是程序员们已经相当满足、相当满意。
程序员们都有强迫症----灭bug大神。不管是遇到404,还是500,还是303,他们一句fuck之后就开始蛮干,直到修复为止,从不放弃。当他们看到你电脑还在用着过时的win7、win8的时候,总是情不自禁的想帮你换成win10,他们总想给你插内存条、电脑清灰、换SSD。不是说他们有多热情,而是…因为职业病。他们的电脑手机iPad每个都是最新款最高配,每个软件都是最新版,还会强迫你去更新最新软件,强迫你去更新最新系统。所以不要在程序员面前显摆你的电子设备有多牛逼,他们都不屑去看你那些过时的电子古董。
程序员们都有一个梦中情人,那就是华丽炫酷顶配的电脑。CPU肯定是八代intel i7 8700k标配(脑残发烧友上i9),搭载英伟达显卡1080Ti或Titan,主板不用玩家国度ROG就觉得对不起自己小小的内心,内存条上美商海盗船或耀眼的芝奇3200Hz,而且一上来就32G或64G,360分体式水冷,纯透明钢化玻璃机箱配备炫酷灯,4K超清曲面显示屏,炫酷的一逼,不管是玩游戏吃鸡还是撸代码,这都是刚需。他们看高配电脑的眼神,就像你们看到美女一样,远远的凝视不愿离去。
咳,咳,程序员都很自恋,请为IT小哥哥们打call!
一人我编程累
碎过了节操心沉醉
两眼是Code相随
不求他日能早归
鼠标我轻点屏
键盘我手速行
痴情代码
心甘情愿
千里把那个bug寻
说项目呵呵笑
PM主意太奇妙
我轻狂那太高傲
我懵懂的无知太年少
赶进度,没班下
上线了产品还牵挂
千古的留名传佳话
我三年架构已白发
天天加班何人陪
谁是谁非谁相随
全栈通吃为了谁
我能写几回,测几回
败硬件,斗时间
提高了并发已成仙
豪情万丈天地间
我续写了另类码农篇
红尘事我已斩断
久居帝都人心乱
当年房价没上万
我 为这了没买留遗憾
创业我愁断肠
眼中我泪两行
多年为君早日上市
一朝敲钟把名扬
爱情是什么鬼
谁信谁就脑进水
谁错谁对谁是谁非
深夜我把代码怼
性能我心头事
此生我怀大志
为了老板回眸一笑
我立下这毒誓
VR我常相伴
AI我深度上
回眸沧海
一曲忧伤
感触盒饭香
项目实施人在外
我归来之日谁还在
兄弟写码论豪迈
我驰骋职场求一败
程序员我们都是傻逼
编程语言改变了哥的口味
C++,JAVA,PHP
许多年前还要学VB
找不到对象毫不诡异
茶不思饭不想视死如归
寂寞的时候干什么?
写程序写程序
失恋的时候干什么?
写程序写程序写程序
发骚的时候干什么?
写程序写程序
剩下的时候干什么?
调程序调程序调程序
64.滑动窗口的最大值

64.滑动窗口的最大值
题目描述
import java.util.ArrayList;
import java.util.ArrayDeque;
public class Solution {
/**
用一个双端队列,队列第一个位置保存当前窗口的最大值,当窗口滑动一次
1.判断当前最大值是否过期
2.新增加的值从队尾开始比较,把所有比他小的值丢掉
*/
public ArrayList<Integer> maxInWindows(int [] num, int size)
{
ArrayList<Integer> res = new ArrayList<>();
if(size == 0) return res;
int begin;
ArrayDeque<Integer> q = new ArrayDeque<>();
for(int i = 0; i < num.length; i++){
begin = i - size + 1;
if(q.isEmpty())
q.add(i);
else if(begin > q.peekFirst())
q.pollFirst();
while((!q.isEmpty()) && num[q.peekLast()] <= num[i])
q.pollLast();
q.add(i);
if(begin >= 0)
res.add(num[q.peekFirst()]);
}
return res;
}
}
作者:Jason分类:【offer】浏览(249)评论(0)
54.字符流中第一个不重复的字符

54.字符流中第一个不重复的字符
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
public class Solution {
int[] hashtable = new int[256];
StringBuffer s = new StringBuffer();
//Insert one char from stringstream
public void Insert(char ch)
{
s.append(ch);
if(hashtable[ch] == 0)
hashtable[ch] = 1;
else hashtable[ch] += 1;
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
char[] str=s.toString().toCharArray();
for(char c:str)
{
if(hashtable[c] == 1)
return c;
}
return '#';
}
}
作者:Jason分类:【offer】浏览(232)评论(0)
1066. 图像过滤(15)–PAT乙级真题java实现

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
int M = sc.nextInt(), N = sc.nextInt(), A = sc.nextInt(),
B = sc.nextInt(), filter = sc.nextInt();
for(int i = 0; i < M; i++) {
for(int j = 0; j < N; j++) {
int rgb = sc.nextInt();
if(rgb >= A && rgb <= B) {
rgb = filter;
}
if(j != 0)
System.out.print(" ");
System.out.printf("%03d",rgb);
}
System.out.println();
}
}
}
//solution two
class solution{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
int M = Integer.parseInt(s[0]), N = Integer.parseInt(s[1]),
A = Integer.parseInt(s[2]), B = Integer.parseInt(s[3]),
filter = Integer.parseInt(s[4]);
for(int i = 0; i < M; i++) {
String[] sp = br.readLine().split(" ");
for(int j = 0; j < N; j++) {
int rgb = Integer.parseInt(sp[j]);
if(rgb >= A && rgb <= B) {
rgb = filter;
}
if(j != 0)
System.out.print(" ");
System.out.printf("%03d",rgb);
}
System.out.println();
}
}
}
1039. 到底买不买(20)-浙大PAT乙级真题java实现

1039. 到底买不买(20)
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色.例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
输入格式:
每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。
输出格式:
如果可以买,则在一行中输出“Yes”以及有多少多余的珠子;如果不可以买,则在一行中输出“No”以及缺了多少珠子。其间以1个空格分隔。
输入样例1:
ppRYYGrrYBR2258
YrR8RrY
输出样例1:
Yes 8
输入样例2:
ppRYYGrrYB225
YrR8RrY
输出样例2:
No 2
25.复杂链表的复制

25.复杂链表的复制
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
解题思路:
1、遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面;
2、重新遍历链表,复制老结点的随机指针给新结点,如A1.random = A.random.next;
3、拆分链表,将链表拆分为原链表和复制后的链表
public class RandomListNode {
int label;
RandomListNode next = null;
RandomListNode random = null;
RandomListNode(int label) {
this.label = label;
}
}
public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
if(pHead == null)
return pHead;
//Clone RandomListNode
RandomListNode pNode = pHead;
while(pNode != null){
RandomListNode pCloned = new RandomListNode(pNode.label);
pCloned.next = pNode.next;
pCloned.random = null;
pNode.next = pCloned;
pNode = pCloned.next;
}
//
pNode = pHead;
while(pNode != null){
RandomListNode pCloned = pNode.next;
if(pNode.random != null)
pCloned.random = pNode.random.next;
pNode = pCloned.next;
}
//seperate two list
pNode = pHead;
RandomListNode pClonedHead = null;
RandomListNode pCloned = null;
if(pNode != null){
pClonedHead = pCloned = pNode.next;
pNode.next = pCloned.next;
pNode = pNode.next;
}
while(pNode != null){
pCloned.next = pNode.next;
pCloned = pCloned.next;
pNode.next = pCloned.next;
pNode = pNode.next;
}
return pClonedHead;
}
}
作者:Jason分类:【offer】浏览(251)评论(0)
拥抱失败比战胜困难更可贵

今天看了《跟着贝尔去冒险》,感触很深,所以想把自己的感悟写下来,留作纪念。
第一,跳出自己的safety zone,勇于尝试和挑战不同的事物;第二,拥抱失败,此时的拥抱失败并不是说,你安于现状不思进取,而是一种心态,拥抱失败之后更能克服自己在这方面的不足。
在这个富有挑战的社会里,人们一直倡导要付出巨大的努力战胜困难取得成功。当然,当你付出足够多的努力和尝试,最终你真的会取得自己想要的成绩,也可以获得从未有过的高度和自豪感,这种喜悦和快乐是无与伦比的,也是大家都崇尚的。可是人们忽略了一点,有些时候,机会只有一次,在机会来临的时候你自身还不足以胜任所面临的挑战,而现实条件又不允许你有够足够多的尝试,不允许你有足够多的练习去取得你想达到的高度,而此时你还要硬着头皮去做目前这项挑战,迎接你的肯定是失败,这是毫无疑问的。你看着前面很多人都可以轻而易举而完成的任务,即使对于一个女生来说也不费吹灰之力,可对你来说,可能就特别的困难,以你此时的水平和条件去完成这项任务几乎是不可能的,然后你失败了。你觉得很丢人,你觉得无地自容,为什么大家都能轻而易举完成的,你却做的那么糟糕?就像《跟着贝尔去冒险》里的小白,他第一次尝试仅仅借助一根绳索越过下面是水流湍急的瀑布时,由于平衡性不好,他从绳子上掉下来了,但是此时他并没有放弃,还是挣扎了很久,没有回归原位,还是以失败告终。
他觉得自己可以完成这个任务,可是贝尔不给他第二次机会,因为每个人都仅有一次机会。然而小白觉得很委屈,于是自己一个人贸然的穿过了瀑布,走到了原来出发的那一边,贝尔觉得小伙子很有骨气,决定再给他一次机会。这次,小白太想完成这个任务了,由于紧张和着急,他还是从绳索上掉了下来。但是他还是没有放弃,还是想重新跃到绳索上,一次,两次,三次,……,到第七次由于筋疲力尽他还是松了手,第二次让缆绳把自己运送到了瀑布的对岸。看着自己队友的一个女生都可以完成的任务,自己却两次都失败了,他觉得很委屈,默默地落下了眼泪。
我很敬重小白,他真的在尝试的过程中使出了自己所有的能力,虽然他在前面所有的挑战中都完成的特别好,唯独这一个任务以失败告终,但是他承受失败的能力着实让人敬佩。
其实在这个文明社会上,我们每个人都有每个人的优点和短板,有的人天生平衡性好,有的人天生体力好,有的人天生恐高,有的人天生怕水,有的人天生既平衡性好又体力好…… 当在先天因素起决定性因素的场合,有些人不费吹灰之力完成的事儿,对另一类人来说,可能废了九牛二虎之力还是以失败告终。由于自尊心和荣辱感在作怪,你可能感到丢脸、挫败感、无地自容、委屈、心里落差…… 此时的你感到无比的气馁和丧气,觉得自己怎么那么不如别人。其实每个人都有每个人的特点,有的人平衡性差可是唱歌好听又有幽默感,有的人天生怕水可是绘画和弹钢琴是别人可望不可即的,有的人逻辑思维很强可是不懂天文气象学,我们没必要拿自己的劣势和别人的优势做比较。但是我想说,只要你在跳出自己的safety zone的过程中努力了,付出了,勇于尝试了,你就是最棒的。不要只是拿自己的先天短板和别人的长处做对比。拥抱失败,享受过程。拥抱失败比战胜困难更重要,此时所需的心里承受能力是别有一番滋味在心头的,是你内心强大的逆商的体现。你战胜困难的劲儿决定了你事业的高度,但是你承受失败的能力才决定你事业的广度和长度。
拥抱失败,并不等于你安于现状不思进取,而是一种心态,拥抱失败之后更能克服自己在这方面的不足。有些人天生平衡性和体力不好,比如说小白,当有外界刺激激励到他时,他肯定不会让自己的平衡力和体力一直处于这种劣势当中,肯定会通过自己的努力去改善、去锻炼,从而达到一种可能连天生体力好的人都无法达到的高度,这就是拥抱失败,这就是刻意进取,这才是最大的收获。在这个过程中,承受自己第一次遇到失败的挫败感,可能比在努力使自己变好的过程付出的艰辛努力更需要勇气和胆量。
世界上并非只有智商和情商,只拥有Higher智商和情商的人,取得不了大成功,拥有Higher智商、情商和逆商的人,才是时代的引领者,才是世界的开路人。拥抱失败需要更大的勇气,战胜困难只是成功的微不足道的一步,拥抱失败才是一个人高逆商的体现,才是一种更博大的胸怀和勇气。
1057.数零壹(20)--PAT乙级真题java实现

1057.数零壹(20)–PAT乙级真题java实现
给定一串长度不超过10^5的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0、多少1。例如给定字符串“PAT (Basic)”,其字母序号之和为:16+1+20+2+1+19+9+3=71,而71的二进制是1000111,即有3个0、4个1。
输入格式:
输入在一行中给出长度不超过105、以回车结束的字符串。
输出格式:
在一行中先后输出0的个数和1的个数,其间以空格分隔。
输入样例:
PAT (Basic)
输出样例:
3 4
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine().toLowerCase();
int sum = 0;
char[] chs = s.toCharArray();
for(int i = 0; i < chs.length; i++) {
if(chs[i] >= 'a' && chs[i] <= 'z') {
sum += chs[i] - 'a' + 1;
}
}
int one = 0, zero = 0;
while(sum != 0) {
if(sum % 2 == 0)
zero++;
else
one++;
sum = sum / 2;
}
System.out.println(zero + " " + one);
}
}
1010. 一元多项式求导 (25)-浙大PAT乙级真题java实现

1010. 一元多项式求导 (25)
设计函数求一元多项式的导数。(注:x^n(n为整数)的一阶导数为n*x^(n-1)。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
注意:记得考虑没有输入的情况。以及,输入的只是常数项的情况。这个时候是要输出”0 0″的。