第一周刷题记录来了~

2022-1-1 Saturday Esay

一维数组变二维数组
System.arraycopy(original, i, ans[i / n], 0, n);

图形化一下就很好理解了~

2022-1-2 Sunday Medium

消除游戏,等差数列模拟

  1. class Solution {
  2. public int lastRemaining(int n) {
  3. int head = 1;
  4. int step = 1;
  5. boolean left = true;
  6. //int n = n;
  7. while (n > 1) {
  8. //从左边开始移除 or(从右边开始移除,数列总数为奇数)
  9. if (left || n % 2 != 0) {
  10. head += step;
  11. }
  12. step *= 2; //步长 * 2
  13. left = !left; //取反移除方向
  14. n /= 2; //总数 / 2
  15. }
  16. return head;
  17. }
  18. }
  19. 作者:xing-you-ji
  20. 链接:https://leetcode-cn.com/problems/elimination-game/solution/wo-hua-yi-bian-jiu-kan-dong-de-ti-jie-ni-k2uj/
  21. 来源:力扣(LeetCode
  22. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2022-1-3 Monday Easy

一周中的第几天:日期在 1971 到 2100 年之间,本质上还是计算天数;

  1. class Solution {
  2. public String dayOfTheWeek(int day, int month, int year) {
  3. String[] week = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
  4. int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
  5. /* 输入年份之前的年份的天数贡献 */
  6. int days = 365 * (year - 1971) + (year - 1969) / 4;
  7. /* 输入年份中,输入月份之前的月份的天数贡献 */
  8. for (int i = 0; i < month - 1; ++i) {
  9. days += monthDays[i];
  10. }
  11. if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) {
  12. days += 1;
  13. }
  14. /* 输入月份中的天数贡献 */
  15. days += day;
  16. return week[(days + 3) % 7];
  17. }
  18. }
  19. // 作者:LeetCode-Solution
  20. // 链接:https://leetcode-cn.com/problems/day-of-the-week/solution/yi-zhou-zhong-de-di-ji-tian-by-leetcode-w43iw/
  21. // 来源:力扣(LeetCode)
  22. // 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2022-1-4 Tuesday Hard

https://leetcode-cn.com/problems/cat-and-mouse/
猫和老鼠,一看 困难题,直接放弃抵抗,躺好;

博弈问题,最优策略

2022-1-5 Wednesday Easy

替换所有问好,这题目没啥意思;

2022-1-6 Thursday Medium

简化路径:栈 字符串

这道题理论上并不复杂,但是 Java SDK 中 对栈的使用很少,所以 API 不熟悉。

  1. class Solution {
  2. public String simplifyPath(String path) {
  3. String[] names = path.split("/");
  4. Deque<String> stack = new ArrayDeque<String>();
  5. for (String name : names) {
  6. if ("..".equals(name)) {
  7. if (!stack.isEmpty()) {
  8. stack.pollLast();
  9. }
  10. } else if (name.length() > 0 && !".".equals(name)) {
  11. stack.offerLast(name);
  12. }
  13. }
  14. StringBuffer ans = new StringBuffer();
  15. if (stack.isEmpty()) {
  16. ans.append('/');
  17. } else {
  18. while (!stack.isEmpty()) {
  19. ans.append('/');
  20. ans.append(stack.pollFirst());
  21. }
  22. }
  23. return ans.toString();
  24. }
  25. }
  26. 作者:LeetCode-Solution
  27. 链接:https://leetcode-cn.com/problems/simplify-path/solution/jian-hua-lu-jing-by-leetcode-solution-aucq/
  28. 来源:力扣(LeetCode
  29. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2022-1-7 Friday Easy

括号的最大嵌套深度,题目意思描述的太复杂,其实没太大意思~

2022-1-8 Saturday Medium

格雷码,完全没听说过

找到一个挺不错的网站:https://oi-wiki.org/misc/gray-code/

image.png

public _List grayCode(_int _n) {
List ret = _new _ArrayList<>();
ret.add(0);
_for
(int _i = 1; i <= n; i++) {
_int _m = ret.size();
_for
(_int _j = m - 1; j >= 0; j—) {
ret.add(ret.get(j) | (1 << (i - 1)));
}
}
_return _ret;
}


2022-1-9 Sunday Easy

按键持续时间最长的键
今天的题也没啥意思,主要是题目有坑~