首页 > 其他分享 >11.14打卡

11.14打卡

时间:2023-11-14 22:15:05浏览次数:38  
标签:return int 11.14 length board ans new 打卡

1. 最小覆盖字串(76)

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。

class Solution {
    public String minWindow(String s, String t) {
        int n = s.length();
        int tot = 0;
        int [] c1= new int[60],c2=new int[60];
        // c1 存储t中出现的字符及字数
        for(char x:t.toCharArray()){
            if (++c1[getId(x)]==1) //统计t中字母出现的次数,在对应字母索引位置
            tot++; //tot记录出现的字符种类数
        }
        String ans ="";
        //j 标识左边界,i标识右边界
        for(int i =0,j=0;i<n;i++){
            int idx1= getId(s.charAt(i)); //获取s的字符
            if(++c2[idx1]==c1[idx1]) //如果已经达到了该字母出现的总字数了,就相当于该字符已经可以不用搜索了,可以少搜查一个种类,表明一个字符已经匹配完成
            tot--; //总字符种类-1
            //每当往右移一位,就要判断左边界是可以右移并保证c2>c1,使得当前tot不增加
            while(j<i){
                int idx2=getId(s.charAt(j)); 
                if(c2[idx2]>c1[idx2]&&--c2[idx2]>=0)  
                j++;
                else break;
            }
            if(tot==0 && (ans.length()==0||ans.length()>i-j+1))  //如果长度为0 或者找到更短的就更新
            ans=s.substring(j,i+1);

        }
        return ans;
    }

    //返回字母所在的序号,比如A 就在0,小写也是一样
    public int getId(char x){
        return x>='A'&&x<='Z' ? x-'A' +26:x-'a';
    }
}

2.组合(77)

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

class Solution {
    public List<List<Integer>> combine(int n, int k) {
          List<List<Integer>> res = new ArrayList<>();
        if(k<=0||n<k){
            return  res;
        }

        Deque<Integer> path = new ArrayDeque<>();
        dfsconbime(n,k,1,path,res);
    return res;
    }

    private void dfsconbime(int n, int k, int begin,Deque<Integer> path, List<List<Integer>> res) {
        if(path.size()==k){
            res.add(new ArrayList<>(path));
            return;
        }
         for (int i = begin; i <=n-(k-path.size())+1 ; i++){
            path.addLast(i);
            dfsconbime(n,k,i+1,path,res);
            path.removeLast();
        }      
    }
}

3. 子集(78)

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
       List<List<Integer>> ans = new ArrayList<>();
        bfssubsets(0,nums,ans,new ArrayList<Integer>());
        return ans;
    }

    private void bfssubsets(int i, int[] nums, List<List<Integer>> ans, ArrayList<Integer> list) {
   
        ans.add(new ArrayList<>(list));
        
        for (int j = i; j <nums.length ; j++) {
            list.add(nums[j]);
            bfssubsets(j+1,nums,ans,list);
            list.remove(list.size()-1);
        }
       
    }
}

4. 单词搜索(79)

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

思想: 回溯

class Solution {
  
    public boolean exist(char[][] board, String word) {
        char[] words = word.toCharArray();
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                if (dfsexist(board, words, i, j, 0))
                    return true;
            }
        }
        return false;
    }

    private boolean dfsexist(char[][] board,char[] words, int i, int j, int k) {
        if(i>=board.length||i<0||j>=board[0].length||j<0||board[i][j]!=words[k])
            return false;
        if(k==words.length-1)
            return true;
        board[i][j]='\0';
        boolean res = dfsexist(board,words,i+1,j,k+1)||dfsexist(board,words,i,j+1,k+1)
                ||dfsexist(board,words,i-1,j,k+1)||dfsexist(board,words,i,j-1,k+1);
        board[i][j]=words[k];
        return res;
    }

}

5. 删除有序数组中的重复项(80)

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

思想: 快慢指针

class Solution {
    public int removeDuplicates(int[] nums) {
 int n = nums.length;
        if(n<=2)
            return n;
        int slow = 2,fast =2;
        while (fast<n){
            if(nums[slow-2]!=nums[fast]){
                nums[slow]=nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}

 

标签:return,int,11.14,length,board,ans,new,打卡
From: https://www.cnblogs.com/forever-fate/p/17832700.html

相关文章

  • 11.14 衔花
    垫底好心情,从我做起也只能我了昨天改的GNUK改坏了,今天重改妈的模拟赛垫了,现在完全不会计数。好多技巧都忘光光了。幸好很快就要结束了。再见呢朋友们。http://www.ccgp-hebei.gov.cn/sjz/sjz/cggg/zhbggAAAS/202311/t20231114_1910631.htmlS2新购买了三块显卡,一款古......
  • 2023.11.14 总结
    T1题意:已知\(P=10^{18}+31\)为质数且存在原根\(g=42\),记\(A_0\)为\(795484359100928850\),\(A_k=f(A_{k-1})\),其中\(0<f(x)<P\)且满足\(g^{f(x)}\equivx(modP)\),可证明这样\(f(x)\)唯一存在,每次查询一点\(f(x)\)的取值,\(1\lex\le10^5\)。事实上,此......
  • 大二打卡(11.13)
    今天做了什么:今天周一,没有工程实训,没有早八,开心,一觉睡到九点12,刚醒墩儿,手机一震,建民老师发布消息,下午分级测试,以为上周说的每周一套题,就单单是个练习,没想到还是考试,难顶,但是上午的时候还是没怎么放在心上,下午开始测试了,才发觉这玩意工作量这么大,没好好练,根本写不完,才三个小时,我估......
  • 11.14每日总结
    目中在搜索商品时,在没有搜索按钮的情况下,刚开始是写的当用户输入完成后,input框失去焦点blur事件处理,产品提议用户输入后,按enter回车键返回搜索结果。vue中失去焦点事件写法:@blurvue中enter回车键事件写法:@keyup.enter.native......
  • 每日总结11.14
    实验2熟悉常用的HDFS操作  1.实验目的(1)理解HDFS在Hadoop体系结构中的角色;(2)熟练使用HDFS操作常用的Shell命令;(3)熟悉HDFS操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3;(3)JDK版本:1.8;(4)JavaIDE:Eclipse。3.实验步骤(一)编......
  • 每日总结11.14
    (二)编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。首先启动hdfs集群然后创建maven项目MyFSDataInputStream类:package......
  • 11.14
    先记个好玩的ex丁真语录DZ:hcz我觉得你说的很对hcz:我说啥了DZ:我不知道,但我就是觉得你说的很对喜欢我们丁真的意识流吗上午放假的时候让同学整了个洛谷号,今天他们滏阳的奥赛课刚好和他聊聊,发现我们303班真是太厉害了,不管在什么方面都碾压同行在奥赛方面:我们虽然训练的时......
  • 多商家签到打卡奖励免单霸王餐小程序开发
    多商家签到打卡奖励免单霸王餐小程序开发用户注册和登录:提供用户注册和登录功能,以便用户能够参与签到打卡活动。商家入驻:商家可申请入驻平台,提交相关资料并等待平台审核,审核通过后即可发布活动和奖励。签到打卡活动:用户可通过小程序参与商家举办的签到打卡活动,定期签到打卡可获得积......
  • 11.14每日总结
    今天完成了大型数据库的实验二,在第(二)问的时候出现了问题:出现的问题:在做(二)开始使用eclipse去进行编译,但是建的是普通项目,出现了如下错误:    解决方案(列出遇到的问题和解决办法,列出没有解决的问题):对上述问题呢一直在解决,我本人心里还是想用eclipse完成,但是......
  • 20231114打卡
    早上,我在课堂上学习了拓扑排序和关键路径两个在工程实践中非常重要的概念。拓扑排序是一种拓扑排序算法,用于高效地解决有向无环图(DAG)中的依赖问题。关键路径则可以帮助我们确定项目计划中的关键节点和关键路径,是工程项目管理中非常常用的技术。通过课堂讲解和案例分析,我对这两个概......