LeetCode编程题汇总(java实现)

这篇博客汇总了多个LeetCode编程题目,包括26.删除排序数组中的重复项、543.二叉树的直径等,全部使用Java语言进行解答。每个问题都提供了详细的Java代码实现,并涵盖字符串操作、数组处理、树结构等多种算法问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

26.删除排序数组中的重复项

 java代码:

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


    }
}

543.二叉树的直径

java代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int ans;
    public int diameterOfBinaryTree(TreeNode root) {
        ans =1;
        depth(root);
        return ans-1;

        



    }
    public int depth(TreeNode node){
        if(node==null) return 0;
        int L=depth(node.left);
        int R=depth(node.right);
        ans=Math.max(ans,L+R+1);
        return Math.max(L,R)+1;
    }
}

1071.字符串的最大公因子

java代码:

class Solution {
    public String gcdOfStrings(String str1, String str2) {
        /*
        如果 str1 和 str2 存在最大公约数 str,那么就相当于 str1 和 str2 都是由 str 组成的,那么 str1 + str2 和 str2 + str1 应该是相等的
        如果不满足,那么不存在最大公约数

        我们可以通过 两个字符串的长度来求得最大公约数的长度
        比如 str1 = "ABABAB", str2 = "ABAB"
            len1 = 6         len2 = 4
            那么最大公约数 str = "AB"
                         len = 2
        */
        if(!(str1 + str2).equals(str2 + str1)){
            return "";
        }

        return str2.substring(0, gcd(str1.length(), str2.length()));
    }
    /*              a   b
                    18  12
    18 % 12 = 6     12  6
    12 % 6  = 0     6   0
    */
    private int gcd(int a, int b){
        //保证 a 比 b 大
        if(a < b){
            return gcd(b, a);
        }
        if(a % b == 0){
            return b;
        }else{
            return gcd(b, a % b);
        }
    }
}

 

面试题3.数组中重复的数字

java代码:

class Solution {
    public int findRepeatNumber(int[] nums) {
        
        Arrays.sort(nums);
        
        for(int i=0;i<nums.length-1;i++){
            if(nums[i]==nums[i+1]){
                return nums[i];
            }       
        }
        return -1;


    }
}

344.反转字符串

java代码:

class Solution {
    public void reverseString(char[] s) {
        for(int l=0, r=s.length-1;l<r;l++,r--){
            char temp=s[r];
            s[r]=s[l];
            s[l]=temp;

        }
    }
}

 

561.数组拆封

class Solution {
    public int arrayPairSum(int[] nums) {
        Arrays.sort(nums);
        int sum=0;
            for(int i=0;i<nums.length-1;i+=2){
            sum+=nums[i];
               
        }
        return sum;

    }
}

 

977.有序数组的平方

java代码:

class Solution {
    public int[] sortedSquares(int[] A) {
        for(int i=0;i<A.length;i++){
            A[i]=A[i]*A[i];

        }
        Arrays.sort(A);
        return A;
        

    }
}

面试15.二进制中1的个数

java代码:

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
         int res = 0;
        while(n != 0) {
            res += n & 1;
            n >>>= 1;//无符号右移
        }
        return res;


    }
}

728.自除数

class Solution {
    public List<Integer> selfDividingNumbers(int left, int right) {     
        List<Integer> list = new LinkedList<>();
        for (int i = left; i <= right; i++) {
            if (isDivisionMath(i)) {
                list.add(i);
            }
        }
        return list;
    }
    public boolean isDivisionMath(int n) {
        int value = n;
        while (value > 0) {
            if (value%10 != 0 && n%(value%10) == 0) {
                value /= 10;
            }else {
                return false;
            }
        }
        return true;

    }
}

657.机器人能否返回原点

java代码:

class Solution {
    public boolean judgeCircle(String moves) {
        int level =0;
        int vertical=0;
        for(int i=0;i<moves.length();i++){
            if(moves.charAt(i)=='U'){
                vertical++;
            }
            if(moves.charAt(i)=='D'){
                vertical--;
            }
            if(moves.charAt(i)=='L'){
                level--;
            }
            if(moves.charAt(i)=='R'){
                level++;
            }
        }
        return level==0 && vertical==0;

    }
}

 

 

解题思路:遍历nums1和nums2找到值相同的元素并返回对应位置的下标给index,接下来判断index+1位置的元素是否大于当前index位置的元素,不大于就返回-1,大于就返回num2[j+1]位置的元素即可。

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        int[] result = new int[nums1.length];

        for (int i = 0; i < nums1.length; i++) {
            int found = -1;
            int cur = nums1[i];

            int index = -1;
            for (int j = 0; j < nums2.length; j++) {
                if (cur == nums2[j]) {
                    index = j;
                    break;
                }
            }

            if (index != -1) {
                for (int j = index + 1; j < nums2.length; j++) {
                    if (nums2[j] > cur) {
                        found = nums2[j];
                        break;
                    }
                }
            }
            result[i] = found;
        }

        return result;

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值