贪心:求最优解(每次取最大之类的),不需要所有解都列出来,只拿最优!
思路:
设指针把问题分区间,设置常量数值保存状态
涉及两个数组
455 new两个指针,一个对应一个数组。比较两个数的大小,然后按照题意进行指针移动。
while (j<sl&&i<gl){
if (g[i]<=s[j]){
i++;
j++;
n++; //几个能吃饱
}
else {
j++;
}
}
605 间隔种花
1,尽可能种最多得花,采用跳格子得方法,这里边界判断十分重要。
i是最后一个元素或者下一个数为0.
2,采用区间法。设一个指针,不断往后移动,当为1时停止移动,计算该区间最多中几个(判断开头结尾以及数组长度为1为2时)
860找零钱
保存零钱数目状态,不要用map太麻烦了。
if(bill == 5){
// ✌️,收到了5块钱
five++;
}else if(bill == 10){
// 如果顾客给10块钱,✌️,收到了10块钱
ten ++;
if(five > 0){
// 找给顾客5块钱
five--;
}else{
// 555,没钱找了,false
return false;
}
874 在二维平面行走
中心思想:一格一格的走,每一步都更新方向和位置
1,方向问题。
用两个一维数组代表方向x,y。通过设置0,1,2,3来就行方向取值。
int[] directX = new int[]{0, 1, 0, -1};
int[] directY = new int[]{1, 0, -1, 0};
左转
direction = (direction + 3) % 4;
右转
direction = (direction + 1) % 4;
2,坐标更新。
newx=newx+代表x方向数组的值
newy=newx+代表x方向数组的值
// 下一步的坐标
int newX = x + directX[direction];
int newY = y + directY[direction];
x = newX;
y = newY;
944 一个字符串数组 比较每个字符中相应位置的大小
strs = ["abc", "bce", "cae"] 比较 a,b,c 比较 b,c,a 顺序是否是按照字母表排列。
用strs[i].charAt(j)时注意双循环的位置!!!循环几次,这个几就在外层。
for (int i = 0; i < strs[0].length(); i++) {
// 这是列
for (int j = 0; j < strs.length - 1; j++) {
// 判断条件
if (strs[j].charAt(i) > strs[j + 1].charAt(i)) {
res++;
break;