791. 自定义字符串排序
StringBuilder ans = new StringBuilder();
int[] pre = new int[26];把目标字符串做成数组
for(char ch : s.toCharArray()) {
pre[ch - 'a']++;
}
for(char ch : order.toCharArray()) {根据order中的顺序,依次把目标中的字符出完
while(pre[ch - 'a']-- > 0) {
ans.append(ch);
}
}
for(int i = 0; i < 26; i++) {把剩下的目标字符串中地字符出掉
while(pre[i]-- > 0) {
ans.append((char)(i + 'a'));
}
}
return ans.toString();
1232. 缀点成线
一个好的思路是,使线性函数经过原点,这样就没有了常数项;
Ax + By = 0;
A = y1;
B = -x1;
1217. 玩筹码
因为移动两格不需要代价;
而相聚两格地位置,不是奇数就是偶数;
所有实质问题是,找出Math.min(奇数地数量和偶数地数量);
1185. 一周中的第几天
由1970年的最后一天为周一;
之后的所求,即为求出天数 + 4对7取余数即可;
String[] week = new String[]{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int[] yue = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int ans = 4;
for(int i = 1971; i < year; i++) {新的一年
boolean falga = false;
if((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) falga = true;
ans += falga ? 366 : 365;
}
for(int i = 1; i < month; i++) {
ans += yue[i - 1];
if(i == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) ans++;闰年二月加一天
}
ans += day;
return week[ans % 7];
1184. 公交站间的距离
因为是环形的,所以,要么正着走,要么倒着走,求二者最小值即可;
//start = Math.min(start, destination);
//destination = Math.max(start, destination);
注意避免这样的低级错误