leetcode刷题日常

  1. 最长递增子序列
    最长递增子序列
java 复制代码
class Solution {
      public int lengthOfLIS(int[] nums) {
        int n=nums.length;
        if(n==0) return 0;
        int[] dp = new int[n]; // 记录上一个比当前是第几的元素。
        dp[0] = 1;
        int ans = 1;
        for(int i=1;i<n;i++){
            dp[i] =1;
            for(int j=0;j<=i;j++){
                if (nums[j]<nums[i]){
                    dp[i]=Math.max(dp[i],dp[j]+1);
                }
            }
            ans=Math.max(dp[i],ans);
        }
        return ans;
    }


    public int lengthOfLIS1(int[] nums) {
        int n=nums.length;
        if(n==0) return 0;
        int[] dp =new int[n+1]; // dp[i] 是长度为i的递增子序列的末尾的最小值。
        int len = 1; // 当前递增子序列的值。
        dp[len]=nums[0];
        for(int i=1;i<n;i++){
            int cur=nums[i];
            if (cur>dp[len]) {
                dp[len+1]=cur;
                len++;
            }else{
                int pos=0; // 从后向前找
                for(int j=len-1;j>=1;j--){
                    if(dp[j]<cur){
                        pos=j;
                        break;
                    }
                }
                dp[pos+1]=cur;
            }
        }
        return len;
    }

    public int lengthOfLIS2(int[] nums) {
        int len = 1, n = nums.length;
        if (n == 0) {
            return 0;
        }
        int[] d = new int[n + 1];
        d[len] = nums[0];
        for (int i = 1; i < n; ++i) {
            if (nums[i] > d[len]) {
                d[++len] = nums[i];
            } else {
                int l = 1, r = len, pos = 0; // 如果找不到说明所有的数都比 nums[i] 大,此时要更新 d[1],所以这里将 pos 设为 0
                // 对dp原序列进行遍历,将每位元素二分插入 dp 中,如果dp中元素都比它小,将它插到最后。否则,用它覆盖掉比它大的元素中最小的那个。
                while (l <= r) { // 左闭右开,找到比当前元素小的最大元素
                    int mid = (l + r) >> 1;
                    if (d[mid] < nums[i]) {
                        pos = mid;
                        l = mid + 1;
                    } else {
                        r = mid - 1;
                    }
                }
                d[pos + 1] = nums[i];
            }
        }
        return len;
    }

      /**
     * 找到比当前元素大的最小元素
     * @param arr
     * @param cur
     * @return
     */
    public int findBiggerMin(int[] arr,int cur){
        int r=arr.length-1,l=0;
        int ans=-1;
        while(l<=r){
            int mid=(l+r)/2;
            if (arr[mid]>cur){
                ans=mid;
                r=mid-1;
            }else {
                l=mid+1;
            }
        }
        return ans==-1?-1:arr[ans];
    }

    /**
     * 找到比当前元素小的最大元素
     * @param arr
     * @param cur
     * @return
     */
    public int findSmallerMax(int[] arr,int cur){
        int r=arr.length-1,l=0;
        int ans=-1;
        while(l<=r){
            int mid=(l+r)/2;
            if (arr[mid]<cur){
                ans=mid;
                l=mid+1;
            }else {
                r=mid-1;
            }
        }
        return ans==-1?-1:arr[ans];
    }
}
  1. 猜数字游戏
    猜数字游戏
java 复制代码
class Solution {
     /**
     * 299猜数字
     * @param secret
     * @param guess
     * @return
     */
    public String getHint(String secret, String guess) {
        // 记录位置和数字都猜对的个数。
        int a=0,b=0;
        Map<Character,Integer> secretLeft=new HashMap<>();
        Map<Character,Integer> guessLeft=new HashMap<>();
        for(int i=0;i<secret.length();i++){
            if (guess.length()>i&&secret.charAt(i)==guess.charAt(i)){
                a++;
            }else {
                secretLeft.put(secret.charAt(i),secretLeft.getOrDefault(secret.charAt(i),0)+1);
                if (guess.length()>i){
                    guessLeft.put(guess.charAt(i),guessLeft.getOrDefault(guess.charAt(i),0)+1);
                }
            }
        }
        for (Map.Entry<Character, Integer> entry : secretLeft.entrySet()) {
            if (guessLeft.containsKey(entry.getKey())){
                b+=Math.min(guessLeft.get(entry.getKey()),secretLeft.get(entry.getKey()));
            }
        }
        return a+"A"+b+"B";
    }
}
相关推荐
小O的算法实验室2 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
城管不管2 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
Tbisnic2 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx3 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归4 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing4 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习4 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨5 小时前
基础数论总结
笔记·学习·算法
夜不会漫长6 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng7 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习