高盛 java_高盛oa

一道题根本不会,抄答案过了。一道自己写,莫名其妙出现了不会的bug。最后交了暴力解,过了5/7。估计要跪。

总结:

缺点:做过的不熟练。没做过的题不会。一个陌生的小bug也de不出来。

措施:多总结还是有好处的。坚持刷tag题有必要,绝对能慢慢增强实力,很重要。

指定方向的dp: 改变i - 1 j - 1就行了 dp[j] = Math.min(dp[i+1][j-1], dp[i+1][j], dp[i+1][j+1]) + matrix[j];

加下一行不行,不能处理第一行的时候。该成每次加上一行,这样第一行就可以被初始化了。lc 64。

public classSolution {/** @param grid: a list of lists of integers

* @return: An integer, minimizes the sum of all numbers along its path*/

public int minPathSum(int[][] grid) {//corner case

if (grid == null || grid.length == 0) {return -1;

}if (grid[0] == null || grid[0].length == 0) {return -1;

}//intialization

int m =grid.length;int n = grid[0].length;int[][] f = new int[m][n];

f[0][0] = grid[0][0];// for (int i = 1; i < m; i++) {

f[i][0] = f[i - 1][0] + grid[i][0];

}for (int j = 1; j < n; j++) {

f[0][j] = f[0][j - 1] + grid[0][j];

}//top down

for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {

f[i][j]= grid[i][j] + Math.min(f[i - 1][j],f[i][j - 1]);

}

}//result

return f[m - 1][n - 1];

}

}

[学生迟到问题]

Q2(MEDIUM): greatest lateness,不知道地里有没有这题的面经,给一个2d-vector的string,每一行格式是 [日期, 姓名, 开课时间, 到课时间],输出整个输入里累计“相对”迟到时间最长的同学的姓名, 如果学生早于开课时间absolute lateness算0,相对迟到时间是说同学当天绝对迟到时间和当天所有人绝对迟到时间的平均值的差,如果小于的话就算0,如果结果一样按姓名alphabetical输出

不知道存两个哈希表的好处

map.keySet().size()用于找size

每次i都要重新存声明为int

fa363d9b6846686371a9c465dce998e2.png

自己造轮子,写了半天,终于貌似好像过了:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//package whatever;//don't place package name!

import java.io.*;import java.util.*;import java.lang.*;classSolution {//method, need parameter, there is return

publicString latestStudent(String[][] students) {//initialization

HashMap dayToTime = new HashMap();

HashMap nameToTime = new HashMap();

HashMap dayToAverageLateTime = new HashMap();int count = 0;//put time to map

for (int i = 1; i < students.length; i++) {if (students[i][0] == students[i - 1][0]) {

count++;

}else{int averageLateTime = dayToTime.get(students[i - 1][0]) /count;

count= 0;

dayToAverageLateTime.put(students[i- 1][0], averageLateTime);break;

}int time = Integer.valueOf(students[i][3]) - Integer.valueOf(students[i][2]);if (time > 0) {

dayToTime.put(students[i][0], time);

}elsedayToTime.put(students[i][0], 0);

}int countOfAverage =dayToAverageLateTime.keySet().size();int max = 0;//put student into the map, and find the max time

for (int i = 0; i < students.length; i++) {int averageLateTime = dayToAverageLateTime.getOrDefault(students[i][0], 0);int absoluteTime = Integer.valueOf(students[i][3]) - Integer.valueOf(students[i][2]);if ((absoluteTime - averageLateTime)> 0) {

nameToTime.put(students[i][1], absoluteTime -averageLateTime);

max= Math.max(max, absoluteTime -averageLateTime);

}

}//find the max student

int countOfStudents =nameToTime.keySet().size();for(String name : nameToTime.keySet()) {if (nameToTime.get(name) ==max)

System.out.println("max = " +max);returnname;

}return null;

}

}classMyCode {public static voidmain (String[] args) {

String[][] students= {{"1", "A", "540", "570"}, {"1", "B", "540", "543"}, {"1", "C", "540", "530"}, {"2", "A", "540", "580"}, {"2", "B", "540", "580"}, {"2", "C", "540", "595"}};

Solution answer= newSolution();

System.out.println("name = " +answer.latestStudent(students));

}

}

View Code

右端对齐:sb.append("\n");

//package whatever;//don't place package name!

import java.io.*;classMyCode {public static voidmain (String[] args) {

String str1= "abc";

String str2= "def";

String str3= str1 + "\n" +str2;

System.out.println(str3);

}

}

\r是把前面的删掉

//package whatever;//don't place package name!

import java.io.*;classMyCode {public static voidmain (String[] args) {

String str1= "abc";

String str2= "def";

String str3= "gji";

String str4= "jkl";

String str= str1 + "\r" + str2 + "\r" + str3 + "\r" +str4;

System.out.println(str);

}

}

转大写要用.toUpperCase()

学生填志愿问题:可以用 comparable结构

class Student implements Comparable{intscore;intindex;public Student(int score, intindex) {this.score =score;this.index =index;

}

@Overridepublic intcompareTo(Student o) {if(this.score - o.score == 0) {return this.index -o.index;

}//TODO Auto-generated method stub

return this.score-o.score;

}

}

慈善数组每次分钱给最少的:

用pq,然后也可以用比较结构

class Orgnization implements Comparable{

String name;doubleamount;publicOrgnization(String name) {this.name =name;this.amount = 0;

}

@Overridepublic intcompareTo(Orgnization o) {if(this.amount - o.amount == 0) {return this.name.compareTo(o.name);

}return (int) (this.amount -o.amount);

}

有符号的算式版reverse words in a string:用一个变量isnumber来控制,true就append

public classReverseAlgebraExpression {public static voidmain(String[] args) {

String test1= "1*2.4+9.6-23.89";

String answer1= "23.89-9.6+2.4*1";

String test2= "1*2.4+-9.6-23.89";

String answer2= "23.89--9.6+2.4*1";

String test3= "-1*2.4+-9.6-23.89";

String answer3= "23.89--9.6+2.4*-1";

test1(test1, answer1,1);

test1(test2, answer2,2);

test1(test3, answer3,3);//String t1 = "My keyboard is broken!";//String a1 = "My keyboRD IS BROKEN!";//String t2 = "\"Baa, Baa!\" said the sheep";//String a2 = "\"B, B!\" sID THE SHEEP";//test2(t1, a1, 1);//test2(t2, a2, 2);

}public static void test1(String a, String b, inti) {

String output= null;

output=rae(a);if(b.equals(output)) {

System.out.println("Passed case "+i);

}else{

System.out.println("Incorrect "+i+": " +output);

}

}public static void test2(String a, String b, inti) {

String output= null;

output=capLock(a);if(b.equals(output)) {

System.out.println("Passed case "+i);

}else{

System.out.println("Incorrect "+i+": " +output);

}

}public staticString rae(String expression) {boolean isNumber = true;

StringBuilder output= newStringBuilder();if(expression.length() == 0) returnoutput.toString();

StringBuilder buffer= newStringBuilder();

buffer.append(expression.charAt(0));for(int i = 1; i

buffer.append(cur);continue;

}if(isNumber && (cur=='+' || cur == '-' || cur == '*' || cur == '/')) {

output.insert(0, buffer);

buffer= newStringBuilder();

buffer.append(cur);

isNumber= false;continue;

}if(!isNumber && (cur=='+' || cur == '-' || cur == '*' || cur == '/')) {

output.insert(0, buffer);

buffer= newStringBuilder();

buffer.append(cur);

isNumber= true;continue;

}if(!isNumber &&Character.isDigit(cur)) {

output.insert(0, buffer);

buffer= newStringBuilder();

buffer.append(cur);

isNumber= true;

}

}

output.insert(0, buffer);returnoutput.toString();

}public staticString capLock(String input) {boolean capLock = false;

StringBuilder output= newStringBuilder();for(charc: input.toCharArray()) {if(c == 'a' || c == 'A') {

capLock= !capLock;continue;

}if(capLock) {

output.append(Character.toUpperCase(c));

}else{

output.append(c);

}

}returnoutput.toString();

}

}

4 Whole Minute Dilemma有图

给一串歌曲的时间,求里面有多少 pair 可以相加变成整分钟

例如[40, 20, 60] 结果就是 1,必须是 pair,60 自己不能算一个. Waral 博客有更多文章,

我的理解是同一首歌不能重复组成 pair 的

思路是把 时间%60 和 出现的次数 作为键值对存进到一个 map 里面 然后遍历 map 找互补的:

就是twosum的hashmap的变形

世界杯概率: 保留两位小数

String a = String.format("%.2f", result) 一般只能长小数转为短小数

pq的写法:用comparator

PriorityQueue> pq = newPriorityQueue(new Comparator>() {public int compare(Map.Entry a, Map.Entryb) {return b.getValue() -a.getValue();

}

}

);

getOrDefault(Object,V)允许调用者在代码语句中规定获得在map中符合提供的键的值,否则在没有找到提供的键的匹配项的时候返回一个“默认值”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值