首页 > 编程语言 >每日算法--2023.2.4

每日算法--2023.2.4

时间:2023-02-05 00:33:30浏览次数:44  
标签:int right return -- res 2023.2 算法 root left

1.回文子串

class Solution {
    public int countSubstrings(String s) {
        int res = 0 , n = s.length();
        for(int i = 0;i<n;i++){
            int l = i, r  = i;
            while(l>=0&&r<n){
                if(s.charAt(l--) == s.charAt(r++)){
                    res++;
                }else{
                    break;
                }
            }
            int left = i, right = i+1;
            while(left>=0&&right<n){
                if(s.charAt(left--) == s.charAt(right++)){
                    res++;
                }else{
                    break;
                }
            }
        }
        return res;
    }
}

2.任务调度器

class Solution {
    public int leastInterval(char[] tasks, int n) {
        int[] cnts = new int[26];
        for (char c : tasks) cnts[c - 'A']++;
        int max = 0, tot = 0;
        for (int i = 0; i < 26; i++) max = Math.max(max, cnts[i]);
        for (int i = 0; i < 26; i++) tot += max == cnts[i] ? 1 : 0;
        return Math.max(tasks.length, (n + 1) * (max - 1) + tot);
    }
}

3.合并二叉树

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1 == null){
            return root2;
        }else if(root2 == null){
            return root1;
        }

        TreeNode res = new TreeNode(root1.val+root2.val);
        res.left = mergeTrees(root1.left,root2.left);
        res.right = mergeTrees(root1.right,root2.right);
        return res;

    }
}

4.最短无序连续子数组

class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int n = nums.length;
        int[] temp = new int[n];
        for(int i = 0;i<n;i++){
            temp[i] = nums[i];
        }
        Arrays.sort(temp);
        int left = 0, right = n-1;
        while(left<right){
            if(nums[left]!=temp[left]){
                //System.out.println(left);
                break;
            }
            left++;
        }
        while(left<right){
            //System.out.println(right);
            if(nums[right]!=temp[right]){
                //System.out.println(right);
                break;
            }
            right--;
        }
        if(left>=right){
            return 0;
        }
        return right-left+1;

    }
}

5.和为k的子数组

class Solution {
    public int subarraySum(int[] nums, int k) {
        //前缀和+哈希表,因为这里有负数,不同的前缀和可能有相同的值,所以用哈希表和不是set
        HashMap<Integer, Integer> map = new HashMap<>();
        //前缀和的值为k,提前初始化
        map.put(0,1);
        int n = nums.length, cnt = 0;
        int[] addNums = new int[n+1]; 
        for(int i = 1;i<=n;i++){
            //计算到i的前缀和
            addNums[i] = addNums[i-1] + nums[i-1];
            //如果addNums[i]-k的值,之前的前缀和有则有答案返回
            if(map.containsKey(addNums[i] - k)){
                cnt += map.get(addNums[i]-k);
            }
            //最后都要将该前缀和加入到哈希表中,
            map.put(addNums[i],map.getOrDefault(addNums[i], 0)+1);
        }
        return cnt;
    }
}

6.二叉树的直径

class Solution {
    public int res = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        if(root == null){
            return 0;
        }
        if(root.left == null&&root.right==null){
            return 0;
        }
        int temp = 0;
        if(root.left!=null){
            int left = MaxLength(root.left);
            temp += left+1;
        }
        if(root.right!=null){
            int right = MaxLength(root.right);
            temp += right+1;
        }
        return Math.max(res,temp);
    }
    public int MaxLength(TreeNode root){
        if(root.left == null&&root.right==null){
            return 0;
        }
        int temp = 0,left = 0,right = 0;
        if(root.left!=null){
            left = MaxLength(root.left);
            temp += left+1;
        }
        if(root.right!=null){
            right = MaxLength(root.right);
            temp += right+1;
        }
        res = Math.max(res,temp);
        return Math.max(left,right)+1;

    }

}

7.找到所有数组中消失的数字

class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        int n = nums.length;
        for(int i = 0;i<n;i++){
            int temp = nums[i];
            if(nums[i]<0){
                temp = -nums[i];
            }
            if(nums[temp-1]>0){
                nums[temp-1] = -nums[temp-1];
            }
        }
        List<Integer> res = new LinkedList<>();
        for(int i = 0;i<n;i++){
            if(nums[i]>0){
                res.add(i+1);
            }
        }
        return res;
    }
}

  

  

  

  

  

  

标签:int,right,return,--,res,2023.2,算法,root,left
From: https://www.cnblogs.com/lyjps/p/17092709.html

相关文章

  • 如何重装Windows系统——以Windows10为例
    写在重装前重装前注意备份系统盘(一般是C盘)中的数据你需要一个U盘可以把操作系统看做成一个软件软件运行的时候无法删除软件一般情况下系统盘是C盘步骤重装系统主......
  • SpringBoot测试用例的一些小技巧~
    场景一:不想因为测试而对数据库产生脏数据@TestpublicvoidtestInsert(){ Useruser=newUser(); user.setUsername("startqbb"); user.setPassword("123456"); u......
  • 自适应可行BB类算法
    自适应可行BB类算法本文的算法来自于论文:BoJiang&Yu-HongDai(2013)FeasibleBarzilai–Borwein-likemethodsfor extremesymmetriceigenvalueproblems,Optim......
  • 析构函数和构造函数的特点(在汇编中如何识别构造和析构)
    1.构造函数1.1概念​ 常用来完成对象生成时的数据初始化工作,支持函数重载,不可定义返回值,返回值为对象首地址,即this指针拷贝构造函数:参数为对象地址,返回值为this指针1......
  • 哈希表
    哈希表(hashtable)又叫散列表,是一种关联式容器,存储的是一对值,一般是一个key对应一个value(又叫键值对)。数组、链表、栈、队列都是序列式容器,存储的都是一个元素。C++ST......
  • 怎么使用Git查看项目中代码的提交历史记录?
    怎么使用Git查看项目中代码的提交历史记录?可以在git上使用下面这段指令gitlog--pretty=format:"%ai,%an:%s">>~/Desktop/Readme.log在git上执行完之后,就可以在......
  • EF Core自动将实体映射到数据库
    protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder){try{varcompilationLibrary=Dependenc......
  • Tauri All In One
    TauriAllInOneBuildsmaller,faster,andmoresecuredesktopapplicationswithawebfrontend|TauriApps$pnpmcreatetauri-apphttps://tauri.app/htt......
  • 锁调优
    锁调优主要从以下五个方面入手减少锁的持有时间 减小锁的粒度锁粗化锁分离读写分离操作分离无锁(CAS) ReentrantLock上了写锁后,持有锁的线程可以继续加......
  • 自我介绍
    韶菲昔冀簇间魁,椿陌翌殇冢央骇。意或哀唏蕃华未逝之时,亢志凌云、丹忱满腹,予殊荣雅誉于万花丛中,但却终归佚失于残烛之年,伴朽脊而惘然殒逝。既求索桂冠无异湮泯于枯髀,不若渰......