一道题根本不会,抄答案过了。一道自己写,莫名其妙出现了不会的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 class Solution {
    /*
     * @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

高盛oa

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

 

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

import java.io.*;
import java.util.*;
import java.lang.*;


class Solution {
  //method, need parameter, there is return 
    public String latestStudent(String[][] students) {
        //initialization
      HashMap<String, Integer> dayToTime = new HashMap<String, Integer>();
      HashMap<String, Integer> nameToTime = new HashMap<String, Integer>();
      HashMap<String, Integer> dayToAverageLateTime = new HashMap<String, Integer>();
      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);
        }else
          dayToTime.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);
          return name;
      }
      return null;
    }
}

class MyCode {
  public static void main (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 = new Solution();
    System.out.println("name = " + answer.latestStudent(students));
  }
}
View Code

相关文章: