LeetCode 基础题目1

LeetCode 基础题目

最近C++转Java,虽然很相似但是写代码有点吃力,刷些LeetCode基础题熟悉一下语法和简单用法。

学习计划为LeetCode75初级+剑指offer专项突击,后者用C++刷了24天了,所以暂时从那之后开始刷,有空再用Java刷一遍做过的题。

每天应该是3-4题左右,偶尔可能刷的多一点,大概一个月内会把基础的算法和数据结构都刷一下。

1480. 一维数组的动态和

class Solution {
    public int[] runningSum(int[] nums) {
        for(int i=1;i<nums.length;i++){
            nums[i]+=nums[i-1];
        }
        return nums;
    }
}

太简单没啥说的,注意Java中的数组也用length表示数组长度,而且是一个成员变量,不是函数。

724. 寻找数组的中心下标

class Solution {
    public int pivotIndex(int[] nums) {
        int leftSum=0,rightSum=0;
        for(int x: nums){
            rightSum+=x;
        }
        for(int i=0;i<nums.length;i++){
            rightSum-=nums[i];
            if(leftSum==rightSum) return i;
            leftSum+=nums[i];
        }
        return -1;
    }
}

没有语法点,前缀和思想,当然也可以双指针但是复杂度一样没必要。

剑指 Offer II 047. 二叉树剪枝

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode pruneTree(TreeNode root) {
        if(root.left!=null) root.left=pruneTree(root.left);
        if(root.right!=null) root.right=pruneTree(root.right);
        if(root.val==0&&root.left==null&&root.right==null) return null;
        return root;
    }
}

递归方法进行后续遍历然后删除,没有什么难度。语法点注意Java不用指针(从赋值的角度可以理解为都是指针),每个树节点全都是一个树节点的成员变量对应的对象。Java也不用delete一个对象,对象可以被自动回收。

算法思想为从叶子节点往上删除,后序遍历可以做到先访问左右子节点再访问根节点。

你可能感兴趣的:(leetcode,算法,java)