首页 > 编程语言 >初级算法02

初级算法02

时间:2024-06-08 12:12:30浏览次数:27  
标签:02 10 return String int 初级 VALUE 算法 Integer


用时:2.5min

class Solution {
    public void reverseString(char[] s) {
        /** 遍历左右指针交换字符 */
        int l = 0, r = s.length - 1;
        while(l < r){
            char t = s[l];
            s[l] = s[r];
            s[r] = t;
            l++;
            r--;
        }
    }
}


耗时:46min

/* 第一版有问题  最初的思路*/
class Solution {
    public int reverse(int x) {
        /** 记录正负数。然后转换为字符串反转,在转换为数的过程中判断是否超范围 */
        int f = 1;
        if(x < 0){
            f = -1;
            x *= -1;
        }
        char [] s = new String(x + "").toCharArray();
        int convertNum = 0, p = 1;
        for(char c : s){
            if(convertNum * f > Integer.MAX_VALUE / 10 || convertNum * f < Integer.MIN_VALUE / 10){
                return 0;
            }
            convertNum +=(c - '0') * p;
            p *= 10;
        }
        return convertNum * f;
    }
}

/* 第二版 还是采用字符数组的方式 */
class Solution {
    public int reverse(int x) {
        int p = 1;
        if (x < 0) {
            p = -1;
            x *= -1;
        }
        
        char[] digits = Integer.toString(x).toCharArray();
        int left = 0, right = digits.length - 1;
        while (left < right) {
            char temp = digits[left];
            digits[left] = digits[right];
            digits[right] = temp;
            left++;
            right--;
        }
        
        long result = 0;
        for (char digit : digits) {
            result = result * 10 + (digit - '0');
            if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
                return 0; // 溢出处理
            }
        }
        
        return (int) (result * p);
    }
}
/* 第三版采用数学运算的优化方式*/
class Solution {
    public int reverse(int x) {
        int sum = 0;
        while(x != 0){
            int remainder = x % 10;
            x /= 10;
            if(sum > Integer.MAX_VALUE / 10 || sum < Integer.MIN_VALUE / 10){
                return 0;
            }
            sum = sum * 10 + remainder;
        }
        return sum;
    }
}


耗时:8min

class Solution {
    public int firstUniqChar(String s) {
        if(s.length() == 1){
            return 0;
        }
        int [] arr = new int[26];
        for(char c : s.toCharArray()){
            arr[c - 'a']++;
        }
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if(arr[c - 'a'] == 1){
                return i;
            }
        }
        return -1;
    }
}


耗时:3min

class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        int [] letter = new int[26];
        for(char c : s.toCharArray()){
            letter[c - 'a']++;
        }
        for(char c : t.toCharArray()){
            if(letter[c - 'a'] < 1){
                return false;
            }
            letter[c - 'a']--;
        }
        return true;
    }
}


耗时:24min

class Solution {
    public boolean isPalindrome(String s) {
        String dealStr = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
        int l = 0, r = dealStr.length() - 1;
        while(l < r){
            if(dealStr.charAt(l) != dealStr.charAt(r)){
                return false;
            }
            l++;
            r--;
        }
        return true;
    }
}


耗时:39min

class Solution {
    public int myAtoi(String s) {
        StringBuilder sb = new StringBuilder();
        String str = s.trim();
        int sign = 1;
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            // 符号
            if(c == '-' && i == 0){
                sign = -1;
                continue;
            }
            if(c == '+' && i == 0){
                continue;
            }
            // 非数字字符
            if(c < '0' || c > '9'){
                break;
            } 
            // 过滤前导零
            if(c == '0' && sb.length() == 0){
                if(i + 1 < str.length() && (str.charAt(i + 1) < '0' ||str.charAt(i + 1) > '9')){
                    break;
                }
                continue;
            }
            if(c == '0' && sb.length() == 0){
                continue;
            }
            sb.append(c);
        }

        // 计算整数值
        int sum = 0;
        for(char c : sb.toString().toCharArray()){
            // // 超范围
            // if(sum > Integer.MAX_VALUE / 10 || sum < Integer.MIN_VALUE  / 10){
            //     return sum > Integer.MAX_VALUE / 10 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            // }
                if(sum > Integer.MAX_VALUE/10 || (sum == Integer.MAX_VALUE/10&&(c - '0')>Integer.MAX_VALUE%10)){
                    return Integer.MAX_VALUE;
                }

                if(sum < Integer.MIN_VALUE/10 || (sum == Integer.MIN_VALUE/10&&-(c - '0')<Integer.MIN_VALUE%10)){
                    return Integer.MIN_VALUE;
                }
            sum = sum * 10 + (c - '0') * sign;
        }
        return sum ;
    }
}


耗时:8.5min

class Solution {
    public int strStr(String haystack, String needle) {
         return haystack.indexOf(needle);
    }
}


耗时:9min(直接看的题解)

class Solution {
    public String countAndSay(int n) {
        String str = "1";
        for (int i = 2; i <= n; ++i) {
            StringBuilder sb = new StringBuilder();
            int start = 0;
            int pos = 0;

            while (pos < str.length()) {
                while (pos < str.length() && str.charAt(pos) == str.charAt(start)) {
                    pos++;
                }
                sb.append(Integer.toString(pos - start)).append(str.charAt(start));
                start = pos;
            }
            str = sb.toString();
        }
        
        return str;
    }
}


耗时:5min(看了大佬的思路)

class Solution {
    public String longestCommonPrefix(String[] strs) {
        /** 默认第一个字符串就是他们的公共前缀,依次比较删除 */
        String pre = strs[0];
        for(int i = 1; i < strs.length; i++){
            while(strs[i].indexOf(pre) != 0){
                pre = pre.substring(0, pre.length() - 1);
            }
        }
        return pre;
    }
}

标签:02,10,return,String,int,初级,VALUE,算法,Integer
From: https://www.cnblogs.com/20200109-zwh/p/18238265

相关文章

  • (算法)水果成篮——<滑动窗口>
    1.题⽬链接:904.⽔果成篮2.题⽬描述: 3.解法(滑动窗⼝): 算法思路:研究的对象是⼀段连续的区间,可以使⽤「滑动窗⼝」思想来解决问题。让滑动窗⼝满⾜:窗⼝内⽔果的种类只有两种。做法: 右端⽔果进⼊窗⼝的时候,⽤哈希表统计这个⽔果的频次。这个⽔果进来后,判断哈希表的......
  • Springboot计算机毕业设计疫情蔬菜供给系统演示录像2022【附源码】开题+论文+mysql+程
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景2022年,全球仍受到新冠疫情的深远影响。在疫情期间,人们的生活方式和消费习惯发生了显著变化,尤其是在食品采购方面。蔬菜作为日常生活的必需品,其供给稳......
  • 2024年5月文章一览
    2024年5月编程人总共更新了7篇文章:1.2024年4月文章一览2.《自动机理论、语言和计算导论》阅读笔记:p215-p3513.《自动机理论、语言和计算导论》阅读笔记:p352-P4014.《自动机理论、语言和计算导论》阅读笔记:p402-p4275.《自动机理论、语言和计算导论》阅读笔记:p428-p5256.《编......
  • 数据结构学习笔记-迪杰斯特拉算法
    最短路径问题的经典解法-dijsktra算法问题描述:求从一个顶点到另一个顶点的最短路径【算法设计思想】Dijkstra算法的设计思想基于以下关键概念和步骤,旨在找出图中从一个给定的源顶点到其他所有顶点的最短路径。这个算法适用于有向和无向图,只要图的边权重为非负值。1.初始化......
  • Llama模型家族之拒绝抽样(Rejection Sampling)(五)蒙特卡罗算法在拒绝抽样中:均匀分布与
    LlaMA3系列博客基于LlaMA3+LangGraph在windows本地部署大模型(一)基于LlaMA3+LangGraph在windows本地部署大模型(二)基于LlaMA3+LangGraph在windows本地部署大模型(三)基于LlaMA3+LangGraph在windows本地部署大模型(四)基于LlaMA3+LangGraph在w......
  • 「漏洞复现」锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞(XVE-2024-211
    0x01 免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需......
  • P7219 [JOISC2020] 星座 3 题解
    会发现题目的坐标其实是平面直角坐标系。我们按\(y\)坐标从小到大考虑所有的星星,假设当前考虑到了星星\(i\)。我们先计算出之前所有能够影响到\(i\)的星星的代价和为\(cost\)(可以用树状数组维护)。然后分类讨论。若\(c_i\lecost\),那么肯定直接将\(i\)直接涂黑,因为它更......
  • Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读
    paper:PyramidVisionTransformer:AVersatileBackboneforDensePredictionwithoutConvolutionsofficialimplementation:GitHub-whai362/PVT:OfficialimplementationofPVTseries存在的问题现有的VisionTransformer(ViT)主要设计用于图像分类任务,难以直接用......
  • P10560 [ICPC2024 Xi'an I] The Last Cumulonimbus Cloud 题解
    好好玩的题。思路对于一个图上邻域问题,我们有一个很经典的做法:根号分治。考虑根号分治的本质是什么。我们把点分成两类,平衡每一种点的时间,也就是度数大的与度数小的点。所以对于这道题,我们有了更加好的做法。发现题目给的图的性质就是一个天然的划分方案。我们每次找到图中......
  • P10553 [ICPC2024 Xi'an I] Guess The Tree 题解
    挺有意思的题。思路考虑一个比较自然的做法。我们每次对于一棵树,我们将它的某一条链抽出来。这样,我们只需要知道这颗树的所有节点与链底的\(\text{lca}\),就可以知道它是属于这条链上哪一个节点的下面。然后就可以递归处理。由于交互库不是自适应的。我们可能可以想到随机......