题目

#180 Consecutive Numbers

解题思路

使用临时变量 prevVal 保存上一个 Num 值,然后使用临时变量 count 保存当前连续出现相同数字的次数。最外层 SELECT 再把 Num 这一列中 nowCount >= 3 的值取出。

连续数字计数可使用 @count := IF(@prevVal = Num, @count + 1, 1) 条件,prevVal 若为 NULL,等式不成立 count 初始化为 1;若 prevVal 是正常值则正常比较,现在值等于前值则加 1,否则初始化为 1。

这里如果用 CASE WHEN 则代码会长一些:

1
2
3
4
CASE
WHEN @prevVal = Num THEN @count:=@count + 1
ELSE @count:=1
END AS nowCount

Read More

本博客基于 Jacman 这个主题,这篇文章记录一下所做的一些修改。原理都是相同的,这些修改一般也可以用于其他主题。

banner 图片上的文字加阴影

本博客 banner 图片搭配白色字体很难看清,换其他颜色字体搭配起来也总觉得不好看,就想到了字体加阴影。

字体阴影使用了 CSS 的 text-shadow,搜索框阴影是 box-shadow,修改的地方如下:

Read More

题目

#197 Rising Temperature

解题思路

依然是 Ranking 类问题。首先构造一个临时表 tmpTable,里面构造一个临时变量 prevVal 储存上一个 Temperature 值,把比较结果储存在临时列 isRising;构造一个临时变量 prevDate 用于判断日期是否连续。然后 SELECT 所有临时表中 isRising = 1 AND isDateOk = 1 的行。最后最外层过滤其他列,只选出 Id 一列。

日期比较方法有以下几种,第一第二种差不多,第三种当 @preDate = NULL 时 DATE_ADD 函数会出错不建议使用

  • Date BETWEEN Date AND @prevDate + INTERVAL 1 DAY
  • Date > @prevDate AND Date <= @prevDate + INTERVAL 1 DAY
  • Date BETWEEN Date AND DATE_ADD(@prevDate, INTERVAL 1 DAY)
  • DATEDIFF(Date, @prevDate) = 1

Read More

Java

非常简单,创建一个 Throwable 对象,就可以得到当前的 stack trace。下面例子是打出调用 foobar() 函数的 trace:

1
2
3
4
private void foobar() {
Throwable t = new Throwable();
Log.d(TAG, "stack trace is ", t);
}

C++

Android 4.4 及之前版本

也比较简单,使用 utils/Callstack 类即可。头文件位于 frameworks/native/include/utils/CallStack.h,一般无需修改 Android.mk 可直接使用。

Read More