算法题目Java

题目来源:leetcode

一、简单

✓ 两数之和

 public int[] twoSum(int[] nums, int target) {
       HashMap<Integer,Integer> sum=new HashMap<>();
        for(int i=0;i<nums.length;i++){
            if(sum.containsKey(target-nums[i])){
                return new int[]{sum.get(target-nums[i]),i};
            }
            sum.put(nums[i],i);
        }
        return new int[]{};
    
    }

✓ 回文数

public boolean isPalindrome(int x) {
        String str=String.valueOf(x);
        int i=0;
        int j=str.length()-1;
        do{
            if(str.charAt(i)!=str.charAt(j)){
                break;
            } else if(i>=j){
                return true;
            }
            i++;
            j--;
        }while(i<str.length());
        return false;
    }

✓ 罗马数字转整数

public int romanToInt(String s) {
 Map<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);
        int result = 0;
        int prev = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            int curr = map.get(s.charAt(i));
            if (curr < prev) {
                result -= curr;
            } else {
                result += curr;
            }
            prev = curr;
        }
        return result;
    }

✓ 最长公共前缀

public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
            return "";
        }
        String prefix = strs[0];
        for (int i = 1; i < strs.length; i++) {
            while (strs[i].indexOf(prefix) != 0) {
                prefix = prefix.substring(0, prefix.length() - 1);
                if (prefix.isEmpty()) {
                    return "";
                }
            }
        }
        return prefix;
    }

✓ 有效的括号

 public boolean isValid(String s) {
        if (s == null || s.length() == 0) {
            return false;
        }
        Map<Character, Character> map = new HashMap<>();
        map.put(')', '(');
        map.put(']', '[');
        map.put('}', '{');
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(map.containsKey(c)){//)]}
                if(stack.isEmpty() || stack.peek()!= map.get(c)){
                    return false;
                }
                stack.pop();
            }else{
                stack.push(c);
      }
        }
        return stack.isEmpty();
    
    }

✓ 合并两个有序链表

 public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
   ListNode l3=new ListNode();
        ListNode l3_temp=l3;
        while(list2!=null&&list1!=null){
            if(list1==null){
                l3=list2;
                break;
            }
            if(list1.val<list2.val){
                l3_temp.next=list1;
                list1=list1.next;
            }else{
                l3_temp.next=list2;
                list2=list2.next;
            }
            l3_temp=l3_temp.next;
        }
        if(list1!=null){
            l3_temp.next=list1;
        }else{
            l3_temp.next=list2;
        }

        return l3.next;
    }

✓ 删除有序数组中重复的元素

public static int removeDuplicates(int[] nums) {
       if (nums.length == 0) return 0;
        int i = 0;
        for(int j=1;j<nums.length;j++){
            if(nums[j]!=nums[i]){
                i++;
                nums[i]=nums[j];
            }
        }
        return i + 1;
    }

✓ 移除元素

 public int removeElement(int[] nums, int val) {
       int slow = 0;
        for (int fast = 0; fast < nums.length; fast++) {
            if (nums[fast]!=val) {
                nums[slow++] = nums[fast];
            }
        }
        // 数组尾部置0
       nums=Arrays.copyOf(nums,slow);
        return nums.length;
    }

✓ 找出字符串中第一个匹配项的下标

  public static int strStr(String haystack, String needle) {
        if(needle.length() == 0){
            return 0;
        }
        return haystack.indexOf(needle);
    }

✓ 搜索插入位置

public static int searchInsert(int[] nums, int target) {
        if(nums.length == 0){
            return 0;
        }
        for(int i=0;i<nums.length;i++){
            if(nums[i]==target){
                return i;
            }
        }
        for(int i=0;i<nums.length;i++){
            if(nums[i]>target){
                nums[i]=target;
                return i;
            }else if(i==nums.length-1){
                nums[i]=target;
                return i+1;
            }
        }
        return 0;
    }

✓ 返回最后一个单词的长度

  public static int lengthOfLastWord(String s) {
        String[] words = s.split(" ");
        return words[words.length - 1].length();

    }

✓ 数组加一

    public static int[] plusOne(int[] digits) {
        int carry = 1;
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i] += carry;
            carry = digits[i] / 10;
            digits[i] %= 10;
        }
        if (carry == 1) {
            int[] result = new int[digits.length + 1];
            result[0] = 1;
            System.arraycopy(digits, 0, result, 1, digits.length);
            return result;
        } else {
            return digits;

        }
    }

✓ 二进制求和

    public static String addBinary(String a, String b) {
        int maxLength = Math.max(a.length(), b.length());
        StringBuilder sb = new StringBuilder();//StringBuilder类用来构建字符串
        int carry = 0;
        // 相加,并模拟加法进位
        for (int i = 0; i < maxLength; i++) {
            // 取两个字符串对应位的数值
            int x = i < a.length() ? a.charAt(a.length() - 1 - i) - '0' : 0;
            int y = i < b.length() ? b.charAt(b.length() - 1 - i) - '0' : 0;
            int sum = x + y + carry;
            sb.append(sum % 2);
            carry = sum / 2;
        }
        if (carry > 0) {
            sb.append(carry);// 若有进位,在最前面加1
        }
        return sb.reverse().toString();// 翻转返回字符串
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值