贪心算法类

贪心:求最优解(每次取最大之类的),不需要所有解都列出来,只拿最优!
思路:
设指针把问题分区间,设置常量数值保存状态

涉及两个数组

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值