【每日一题】1523. 在区间范围内统计奇数数目,860. 柠檬水找零

这篇具有很好参考价值的文章主要介绍了【每日一题】1523. 在区间范围内统计奇数数目,860. 柠檬水找零。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1523. 在区间范围内统计奇数数目 - 力扣(LeetCode)

给你两个非负整数 low 和 high 。请你返回 low  high 之间(包括二者)奇数的数目。

示例 1:

输入:low = 3, high = 7
输出:3
解释:3 到 7 之间奇数数字为 [3,5,7] 。

示例 2:

输入:low = 8, high = 10
输出:1
解释:8 到 10 之间奇数数字为 [9] 。

提示:

  • 0 <= low <= high <= 10^9
class Solution {
    public int countOdds(int low, int high) {
         int ans = 0;
         ans += (low%2==0?0:1);
         if(high!=low)
         ans += (high%2==0?0:1);
         return ans!=0?((high-low-1)/2+ans):((high-low)/2+ans);
    }
}

         这是一道简单题。读完题目之后,要求奇数个数,最直接简单的想法就是去循环,然后从头判断到尾。但是,实际上是不需要的。首先要清楚的一点是,奇数偶数是交替出现的。在不考虑特殊情况的前提下,如果给一个范围,最容易想到就是中间奇数偶数各一半。所以只需要将(high-low)/2即可。但实际情况有可能有变化,比如,给的两个数的可能一样,给的两个数可能都是偶数,都是奇数,或者一奇数一偶数。如果边界的两个都是奇数,那么实际过程中需要再减掉一个数再除。如果边界的两个都是偶数,那么实际上边界相减完除2就是奇数的个数。而边界有一个是奇数的则是正常情况(因为奇偶交替,如果正常那么相减+1除2就是正常的)。因为(1)边界两个数都包含的情况下相减,本身会少掉一个数。(2)由于可能会出现两个相同的数,所以边界需要先进行判断。(3)/2的运算,在0.5的时候是不会算做1的。【这里博主由于前面判断边界时已经算过边界的个数了,所以最后表达式会有变化。】奇偶边界的情况下,由于前面判断过了,所以到return时ans=1,无论减不减1,结果都没差,因为/2一样。奇奇边界的情况下,由于前面把两个都判断完了,所以相减完实际范围的奇数是要少一个的。偶偶情况下则刚好就是相减/2。

        用这样写一下时间复杂度也是降到很低的程度:

【每日一题】1523. 在区间范围内统计奇数数目,860. 柠檬水找零,每日一题,算法,java,力扣 

860. 柠檬水找零

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

注意,一开始你手头没有任何零钱。

给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

示例 1:

输入:bills = [5,5,5,10,20]
输出:true
解释:
前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。
第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。
由于所有客户都得到了正确的找零,所以我们输出 true。

示例 2:

输入:bills = [5,5,10,10,20]
输出:false
解释:
前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。
对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。
对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。
由于不是每位顾客都得到了正确的找零,所以答案是 false。
class Solution {
    public boolean lemonadeChange(int[] bills) {
        if(bills[0] != 5) return false;
        ArrayList<Integer> arr = new ArrayList();
        arr.add(bills[0]);
        int len = bills.length;
        for(int i = 1 ; i < len; i++) {
            int tmp = bills[i] - 5;
            if(tmp == 0) {
                arr.add(bills[i]);
                continue;
            }
            if(tmp == 15) {
                arr.sort(Comparator.naturalOrder());
                if(arr.contains(10)&&arr.contains(5))  {
                    arr.remove(arr.indexOf(5));
                    arr.remove(arr.indexOf(10));
                    arr.add(bills[i]);
                } else if(arr.size()>2&&arr.get(0)==5&&arr.get(1)==5&&arr.get(2)==5) {
                    arr.remove(arr.indexOf(5));
                    arr.remove(arr.indexOf(5));
                    arr.remove(arr.indexOf(5));
                    arr.add(bills[i]);
                } 
                else {
                    return false;
                }
            } else {
                if(!arr.contains(tmp))  {
                    return false;
                } else {
                    arr.remove(arr.indexOf(tmp));
                    arr.add(bills[i]);
                }
            }
        }
        return true;
    }
}

         这道题也是一道简单题。直接模拟即可。找零的时候要注意的只有:15不止可以由10+5还可以由3张5找零,其他的只需要照常写就可以了。文章来源地址https://www.toymoban.com/news/detail-698316.html

到了这里,关于【每日一题】1523. 在区间范围内统计奇数数目,860. 柠檬水找零的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Leetcode每日一题:1782. 统计点对的数目(2023.8.24 C++)

    目录 1782. 统计点对的数目 题目描述: 实现代码与解析: hash + 双指针 原理思路:         给你一个无向图,无向图由整数  n   ,表示图中节点的数目,和  edges  组成,其中  edges[i] = [ui, vi]  表示  ui  和  vi  之间有一条无向边。同时给你一个代表查询的整数数组 

    2024年02月10日
    浏览(34)
  • 2023-08-25 LeetCode每日一题(统计二叉树中好节点的数目)

    点击跳转到题目位置 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 示例 2: 示例 3: 提示: 二叉树中节点数目范围是 [1, 10 5 ] 。 每个节点权值的范围是 [-10

    2024年02月11日
    浏览(26)
  • 【Hive SQL 每日一题】统计用户连续下单的日期区间

    测试数据 需求说明 统计用户连续下单的日期区间,所以连续的下单日期必须 = 2 ,例如: 2023-01-01,2023-01-02 。 分析步骤如下: 按 user_id 、 order_date 进行分组,同天的下单日期只保留一条。 使用 row_number 窗口函数对行号进行标记。 使用 date_sub 函数与行号标记进行运算,如果

    2024年02月09日
    浏览(26)
  • Leetcode每日一题:1448. 统计二叉树中好节点的数目(2023.8.25 C++)

    目录 1448. 统计二叉树中好节点的数目 题目描述: 实现代码与解析: dfs 原理思路:         给你一棵根为  root  的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 示例 2: 示例

    2024年02月11日
    浏览(30)
  • 2023-06-02 LeetCode每日一题(统计范围内的元音字符串数)

    点击跳转到题目位置 给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] = [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内( 包含 这两个值)并且以元音开头和结尾的字符串的数目。 返回一个整数数组,其中数组的第 i 个元素

    2024年02月07日
    浏览(42)
  • 区间合并|LeetCode2963:统计好分割方案的数目

    【动态规划】【广度优先】LeetCode2258:逃离火灾 区间合并 给你一个下标从 0 开始、由 正整数 组成的数组 nums。 将数组分割成一个或多个 连续 子数组,如果不存在包含了相同数字的两个子数组,则认为是一种 好分割方案 。 返回 nums 的 好分割方案 的 数目。 由于答案可能很

    2024年02月03日
    浏览(33)
  • LeetCode.每日一题 2427. 公因子的数目

      Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接       我会一直往里填充内容哒! 🌈LeetCode专栏:专栏链接       目前在刷初级算法的LeetBook 。若每日一题当中有力所能

    2023年04月17日
    浏览(24)
  • (排序) 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 ——【Leetcode每日一题】

    难度:简单 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 提示 : 0 = n u m s . l e n g t h = 50000 0 = nums.length = 50000 0 =

    2024年02月12日
    浏览(37)
  • 【每日一题】56. 合并区间

    以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 示例 2: 提示: 1 = intervals.length = 104 intervals[i].length == 2 0 = starti = endi = 104 首先将所

    2024年02月10日
    浏览(30)
  • 【每日一题】57. 插入区间

    给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示: 0 = intervals.length = 104 intervals[i].length == 2 0 = interval

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包