首页 > 其他分享 >11.12打卡

11.12打卡

时间:2023-11-12 15:11:40浏览次数:39  
标签:matrix int 11.12 length word1 word2 打卡 dp

1. 简化路径(70)

返回的 规范路径 必须遵循下述格式:

  • 始终以斜杠 '/' 开头。
  • 两个目录名之间必须只有一个斜杠 '/' 。
  • 最后一个目录名(如果存在)不能 以 '/' 结尾。
  • 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。

返回简化后得到的 规范路径 

思想: 栈

class Solution {
    public String simplifyPath(String path) {          String[] names =  path.split("/");
        Deque<String> s = new ArrayDeque<>();
        for (String name : names) {
            if("..".equals(name)){
                if(!s.isEmpty()){
                    s.pollLast();
                }
            }else if(name.length()>0&&!".".equals(name)){
                s.offerLast(name);
            }

        }
        StringBuffer res = new StringBuffer();
       
        if(s.isEmpty()){
            res.append('/');
        }else {
            while (!s.isEmpty()) {
                res.append('/').append(s.pollFirst());
            }
        }
        return res.toString();
    }
}

2. 编辑距离(72)

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。

思想:动态规划

dp[i-1][j-1] 表示替换操作,dp[i-1][j] 表示删除操作,dp[i][j-1] 表示插入操作

以 word1 为 "horse",word2 为 "ros",且 dp[5][3] 为例,即要将 word1的前 5 个字符转换为 word2的前 3 个字符,也就是将 horse 转换为 ros,因此有:

(1) dp[i-1][j-1],即先将 word1 的前 4 个字符 hors 转换为 word2 的前 2 个字符 ro,然后将第五个字符 word1[4](因为下标基数以 0 开始) 由 e 替换为 s(即替换为 word2 的第三个字符,word2[2])

(2) dp[i][j-1],即先将 word1 的前 5 个字符 horse 转换为 word2 的前 2 个字符 ro,然后在末尾补充一个 s,即插入操作

(3) dp[i-1][j],即先将 word1 的前 4 个字符 hors 转换为 word2 的前 3 个字符 ros,然后删除 word1 的第 5 个字符

class Solution {
    public int minDistance(String word1, String word2) {
  int n1 = word1.length();
        int n2  = word2.length();
        int [][] dp = new int[n1+1][n2+1];
          for (int i = 1; i <=n2 ; i++) {
            dp[0][i]=dp[0][i-1]+1;
        }
        for (int i = 1; i <= n1; i++) {
            dp[i][0]=dp[i-1][0]+1;
        }
        for (int i = 1; i <=n1 ; i++) {
            for (int j = 1; j <=n2 ; j++) {
                if(word1.charAt(i-1) ==  word2.charAt(j-1)){
                    dp[i][j]=dp[i-1][j-1];
                }else {
                    dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                }
            }
        }
        return dp[n1][n2];
    }
}

3. 矩阵置0(73)

给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法

class Solution {
    public void setZeroes(int[][] matrix) {
        int[] rows  = new int[matrix.length];
        int[] cols  = new int[matrix[0].length];
        for (int i = 0; i <matrix.length ; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                if(matrix[i][j]==0){
                    cols[j] = 1;
                    rows[i]=1;
                }
            }
        }

  for (int i = 0; i < rows.length; i++) {
            for (int j = 0; j < cols.length; j++) {
                if(rows[i]==1||cols[j]==1)
                    matrix[i][j]=0;
            }
        }
    }
}

4. 搜索二维矩阵(74)

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

思想: 将二维数组当作一维进行二分查找

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
   if(matrix == null || matrix.length == 0){
            return false;
        }
        int row = matrix.length;
        int col = matrix[0].length;
        int left = 0;
        int right = row*col-1;
        while(left <= right){
            int mid = left + (right - left)/2;
            int val = matrix[mid / col][mid % col];
            if(val == target){
                return true;
            }
            else if(val > target){
                right = mid-1;
            }
            else{
                left = mid + 1;
            }
        }
        return false;

    }
}

5. 颜色分类(75)

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。整数 0、 1 和 2 分别表示红色、白色和蓝色。

思想:双指针,p0标记0 的位置更新,p1标记1 的位置更新

class Solution {
    public void sortColors(int[] nums) {
  int n = nums.length;
        int p0=0;
        int p1=0;
        for (int i = 0; i <n ; i++) {
            if(nums[i]==1){
                swaper(nums,i,p1);
                p1++;
            }else if(nums[i]==0){
                swaper(nums,i,p0);
                if(p0<p1){
                    swaper(nums,p1,i);
                  
                }
                  p0++;
                 p1++;
            }
        }
    }
    public void swaper(int[] nums,int i,int p0){
        int temp = nums[i];
        nums[i] = nums[p0];
        nums[p0] = temp;
    }
    }

 

标签:matrix,int,11.12,length,word1,word2,打卡,dp
From: https://www.cnblogs.com/forever-fate/p/17827207.html

相关文章

  • 11.6-11.12总结
    includeincludeincludeusingnamespacestd;classAbstractFile{public:virtualvoidadd(AbstractFile*element)=0;virtualvoidremove(AbstractFile*element)=0;virtualvoiddisplay()=0;};classVideoFile:publicAbstractFile{private:stringf......
  • 20231111打卡
    早上,我利用课间的时间开始了新一轮的学习。我进行了一些算法方面的练习题,巩固了之前所学习的内容,同时对新内容进行了深入的研究。通过反复练习,我感到自己在算法方面的能力已经有了很大的提升。中午,我和几个同学相约去外面恰汉堡王,享用了美食,放松了一下身心。在充满紧张的学习生活......
  • 20231110打卡
    早上,我按照计划开始了新一轮的学习。我花了一些时间复习之前学过的算法知识,并解决了一些算法练习题。通过不断思考和练习,我巩固了自己对算法的理解,并且提升了解决问题的能力。下午,由于天气很冷,我和一些同学相约去打球放松一下。尽管天气寒冷,但是打球的过程中我们感到温暖和快乐。......
  • 11.10打卡
    1.加1(66)给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字classSolution{publicint[]plusOne(int[]digits){for(inti=digits.length-1;i>=0;i--){d......
  • 20231109打卡
    早上,我准时开始了新一轮的学习。首先,我学习了算法与数据结构中的迪杰斯特拉算法和弗洛伊德算法。迪杰斯特拉算法是一种用来解决最短路径问题的算法,而弗洛伊德算法则可以求解任意两点之间的最短路径。通过课堂讲解和实例演示,我逐渐理解了它们的原理和应用。我通过编写代码实践了这......
  • 11.9打卡
    1. 不同路径(61)一个机器人位于一个 mxn 网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。classSolution{publicintuniquePaths(intm,intn){int[][]d......
  • 11月8每日打卡
    实验1熟悉常用的Linux操作和Hadoop操作1.实验目的Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3。3.......
  • 11.7打卡
    1.N皇后II(52)返回N皇后的解集数量classSolution{publicinttotalNQueens(intn){int[]queeens=newint[n];Arrays.fill(queeens,-1);Set<Integer>cols=newHashSet<>(n);Set<Integer>dia1=newHashSet<>......
  • 20231107打卡
    上午的第一节课是算法与数据结构的课程。这门课程对于我们软工学生来说非常重要,因为它涉及到我们日后编写高效代码的能力。今天的内容是广度和深度优先搜索算法,在老师的讲解下,我逐渐理解了它们的原理和应用场景。通过讲解和举例,我们学习了如何使用这两种搜索算法解决实际问题。在......
  • 20231106打卡
    上午的实训课程是机械拆装,这是我们软工专业的一门基础课程。在实训课上,我们学习了自行车的拆装技术。通过实际操作,我们了解了自行车的各个部件以及它们之间的组装方式。我们学习了如何正确使用工具,拆卸和安装自行车的零件,以及如何调整和维护自行车的性能。这门课程的实践性很强,不......