第三周周日总结

1.

小红和小明在玩一个字符串元音游戏。

给你一个字符串 s,小红和小明将轮流参与游戏,小红 先 开始:

  • 在小红的回合,她必须移除 s 中包含 奇数 个元音的任意 非空 

    子字符串

  • 在小明的回合,他必须移除 s 中包含 偶数 个元音的任意 非空 

    子字符串

第一个无法在其回合内进行移除操作的玩家输掉游戏。假设小红和小明都采取 最优策略 

如果小红赢得游戏,返回 true,否则返回 false

英文元音字母包括:aeio, 和 u

示例 1:

输入: s = "leetcoder"

输出: true

解释:
小红可以执行如下移除操作来赢得游戏:

可以执行以下操作:

返回你能执行的 最大 操作次数。

示例 1:

输入: s = "1001101"

输出: 4

解释:

  • 小红先手,她可以移除加下划线的子字符串 s = "leetcoder",其中包含 3 个元音。结果字符串为 s = "der"
  • 小明接着,他可以移除加下划线的子字符串 s = "der",其中包含 0 个元音。结果字符串为 s = "er"
  • 小红再次操作,她可以移除整个字符串 s = "er",其中包含 1 个元音。
  • 又轮到小明,由于字符串为空,无法执行移除操作,因此小红赢得游戏。

    bool doesAliceWin(char* s) {

          bool check(char c) {

            return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');

        }

       

        for (int i = 0; i < strlen(s); i++) {

            if (check(s[i])) {

                return true;

            }

        }

        return false;  

       

    }
     

    如果 s 不包含任何元音,小红输。
    如果 s 包含奇数个元音,小红可以直接把整个 s 移除,小红赢。
    如果 s 包含正偶数个元音,由于偶数减奇数等于奇数,小红移除任意包含奇数个元音的子串后,剩余元音个数仍然为奇数。由于奇数减偶数还是奇数,所以无论小明怎么操作,仍然会剩下奇数个元音,此时小红可以直接把整个 s 移除,小红赢。

  • 2.

    给你一个 

    二进制字符串

     s

    你可以对这个字符串执行 任意次 下述操作:

  • 选择字符串中的任一下标 i( i + 1 < s.length ),该下标满足 s[i] == '1' 且 s[i + 1] == '0'
  • 将字符 s[i] 向 右移 直到它到达字符串的末端或另一个 '1'。例如,对于 s = "010010",如果我们选择 i = 1,结果字符串将会是 s = "000110"
  • 选择下标 i = 0。结果字符串为 s = "0011101"
  • 选择下标 i = 4。结果字符串为 s = "0011011"
  • 选择下标 i = 3。结果字符串为 s = "0010111"
  • 选择下标 i = 2。结果字符串为 s = "0001111"

class Solution {

public:

    int maxOperations(string s) {

        int ans = 0, cnt1 = 0;

        for (int i = 0; i < s.length(); i++) {

            if (s[i] == '1') {

                cnt1++;

            } else if (i && s[i - 1] == '1') {

                ans += cnt1;

            }

        }

        return ans;

    }

};

从左到右遍历 s,同时用一个变量 cnt 
  维护遍历到的 1 的个数。
如果 s[i] 是 1,把 cnt  增加 1。
如果 s[i] 是 0 且 s[i−1] 是 1,意味着我们找到了一段道路,可以让 i 左边的每个0都操作一次,把答案增加 cnt 
遍历结束,返回答案。
3.

给你两个  整数 x 和 y ,分别表示价值为 75 和 10 的硬币的数目。

Alice 和 Bob 正在玩一个游戏。每一轮中,Alice 先进行操作,Bob 后操作。每次操作中,玩家需要拿出价值 总和 为 115 的硬币。如果一名玩家无法执行此操作,那么这名玩家 输掉 游戏。

两名玩家都采取 最优 策略,请你返回游戏的赢家。

示例 1:

输入:x = 2, y = 7

输出:"Alice"

解释:

游戏一次操作后结束:

  • Alice 拿走 1 枚价值为 75 的硬币和 4 枚价值为 10 的硬币。

    class Solution {

    public:

        string losingPlayer(int x, int y) {

            return min(x, y / 4) % 2 ? "Alice" : "Bob";

        }

    };

    因为 10 的倍数不可能等于 115,所以面额为 10 的硬币不能单独选,至少要选 1 个面额为 75 的硬币。

    又由于 75⋅2=150>115,所以面额为 75 的硬币要恰好选 1 个。

    由于 75+10⋅4=115,所以面额为 10 的硬币要恰好选 4 个。
    java总结
     

    集合与数组的区别
    长度区别

            数组长度固定,定义长了造成内存空间的浪费,定义短了不够用。

            集合大小可以变,用多少空间拿多少空间。

    内容区别

            数组可以存储基本数据类型和引用数据类型

            集合中能存储引用数据类型(存储的为对象的内存地址)

           list.add(100);//为自动装箱,100为Integer包装的

    元素区别

            数组中只能存储同一种类型成员

            集合中可以存储不同类型数据(一般情况下也只存储同一种类型的数据)

    集合结构

            在java中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中
        存储元素,等于将数据放到了不同的数据结构当中。什么是数据结构?数据存储的
        结构就是数据结构。不同的数据结构,数据存储方式不同。

    单列集合 Collection

    List可以重复:ArrayList/LinkedList

    Set不可重复:HashSet/TreeSet

    List特点:此处顺序并不是大小顺序,而是存入数据的先后顺序。有序因为List集合都有下标,下标从0开始,以递增。

    Set特点:取出顺序不一定为存入顺序,另外Set集合没有下标。

    ArrayList是非线程安全的。

    HashSet集合在new的时候,底层实际上new了一个HashMap集合。向HashSet集合中存储元素,实际上是存储到了HashMap的key中了。HashMap集合是一个Hash表数据结构。

    SortedSet集合存储元素的特点:由于继承了Set集合,所以他的特点也是无序不可重复,但是放在SortedSet集合中的元素可以自动排序。放到该集合中的元素是自动按照大小顺序排序的。

    TreeSet集合底层实际上是TreeMap。TreeSet集合在new的时候,底层实际上new了一个TreeMap集合。向TreeSet集合中存储元素,实际上是存储到了TreeMap的key中了。TreeMap集合是一个二叉树数据结构。

    双列集合Map:HashMap/TreeMap

  • Collection集合的的常用方法
    方法名    说明
    boolean add(E e)    添加元素到集合的末尾(追加)
    boolean remove(Object o)    删除指定的元素,成功则返回true(底层调用equles)
    void clear()    清空集合
    boolean contains(Object o)    判断元素在集合中是否存在,存在则返回true(底层调用equles)
    boolean isEmpty()    判断集合是否为空,空则返回true
    int size()    返回集合中元素个数
    代码示例

    import java.util.ArrayList;
    import java.util.Collection;

    public class Collection_01 {
        public static void main(String[] args) {
            //父类的引用指向子类的对象,形成多态
            Collection<String> con = new ArrayList<>();
            //追加的方式添加元素
            con.add("东邪");
            con.add("西毒");
            con.add("南帝");
            con.add("北丐");
            con.add("中神通");
            //删除,通过元素名称删除元素
            System.out.println(con.remove("西毒"));
            //判断集合中是否包含指定参数元素
            System.out.println(con.contains("西毒"));  //false
            System.out.println(con.contains("东邪"));    //true
            //获取集合中元素个数
            System.out.println(con.size());
            //判断是否为空
            System.out.println(con.isEmpty());//false
            //清空集合
            con.clear();
            //判断是否为空
            System.out.println(con.isEmpty());//true
            System.out.println(con);//打印集合的元素
        }
    }
     

    以下迭代方式,是所有Collection通用的一种方式。在Map集合中不能使用,在所有的Collection以及子类中使用。

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 dayjs 的 `startOf` 方法来获取当前周的第一天,具体实现如下: ```javascript const dayjs = require('dayjs'); require('dayjs/locale/zh-cn'); // 引入中文语言包,可根据需要选择 // 设置语言为中文 dayjs.locale('zh-cn'); // 获取当前周第一天的时间 const firstDayOfWeek = dayjs().startOf('week').format('YYYY-MM-DD HH:mm:ss'); console.log(firstDayOfWeek); ``` 上述代码中,`startOf('week')` 表示获取当前周的第一天,然后使用 `format` 方法将其格式化为指定的字符串。这里使用的是 `YYYY-MM-DD HH:mm:ss` 格式,你可以根据需要选择其他格式。 ### 回答2: 在dayjs中,可以使用`.startOf`方法来获取特定时间的开始日期。为了在周日获取当前周的第一天,可以使用以下代码: ```javascript const dayjs = require('dayjs'); require('dayjs/locale/zh-cn'); dayjs.locale('zh-cn'); const today = dayjs(); const startOfWeek = today.startOf('week'); console.log(startOfWeek); ``` 解释一下代码的逻辑:首先,通过`dayjs()`获取当前时间。然后,使用`startOf('week')`方法将当前时间调整为所在周的开始日期。最后,将结果打印出来,即可得到当前周的第一天的时间。 需要注意的是,以上代码中的`dayjs()`函数返回的是当前本地时间。如果需要使用其他时区的时间,可以通过dayjs的插件来配置。 以上就是如何在dayjs中获取当前周的第一天的时间的方法。 ### 回答3: 在dayjs中,我们可以使用`.startOf('week')`方法来获取当前周的第一天。周日的索引值为0,所以我们可以使用`.day(0)`方法指定周日作为第一天。 代码示例: ```javascript const dayjs = require('dayjs'); const firstDayOfWeek = dayjs().startOf('week').day(0); console.log(firstDayOfWeek.format('YYYY-MM-DD')); // 输出当前周第一天的时间,例如:2021-01-10 ``` 在上面的示例中,我们首先通过`dayjs()`获取当前时间,然后使用`.startOf('week')`方法将时间调整为当前周的开始。接着,使用`.day(0)`方法指定周日为第一天。最后,使用`.format('YYYY-MM-DD')`方法将时间格式化为指定的格式,以便输出。 注意:以上示例中使用的是dayjs的默认配置,如果需要使用中文显示周日,可以通过dayjs扩展包`dayjs/plugin/localeData`来设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值