Java热题100(简单 中等题) 持续更新

发布于:2024-07-24 ⋅ 阅读:(73) ⋅ 点赞:(0)

1、两数之和   

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

containsKey 

2、 字母异位词分组 

 public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> result = new ArrayList<>();
        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            String key = new String(chars);
            if (!map.containsKey(key)) {
                List<String> list = new ArrayList();
                list.add(strs[i]);
                map.put(key, list);
            } else {
                List<String> addList = map.get(key);
                addList.add(strs[i]);
            }
        }
        for (Object o : map.keySet()) {
            result.add(map.get(o));
        }
        return result;

    }

new String(); 创建list集合、map集合等 

3、最长连续序列

HashSet<Integer> set = new HashSet<>();
        int res = 0;
        for (int num : nums) {
            set.add(num);
        }
        for (int i = 0; i < nums.length; i++) {
            if (!set.contains(nums[i] - 1)) {
                int curNum = nums[i];
                int curLen = 1;
                while (set.contains(curNum + 1)) {
                    curNum = curNum + 1;
                    curLen = curLen + 1;
                }
                res = Math.max(res, curLen);
            }
        }
        return res;

4、移动零

public void moveZeroes(int[] nums) {
        int left = 0;
        if (nums.length == 0 || nums.length == 1) return;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                int temp = nums[i];
                nums[i] = nums[left];
                nums[left] = temp;
                left++;
            }
        }
    }

5、盛最多少的容器

 public int maxArea(int[] height) {
        int left=0;
        int right=height.length-1;
        int vol=0;
        int result=0;
        while(left<right){
            if(height[left]>height[right]){
                vol=(right-left)*height[right];
                right--;
            }else{
                vol=(right-left)*height[left];
                left++;
            }
            result=result>vol?result:vol;
        }
        return result;
    }

6、三数之和

public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> res=new ArrayList<>();
        Arrays.sort(nums);

        if(nums.length<3){
            return res;
        }
        for(int i=0;i<nums.length-2;i++){  
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue; // 跳过重复元素
            }
            int left=i+1;
            int right=nums.length-1;  
            while(left<right){
                if(nums[i]+nums[left]+nums[right]==0){
                    List<Integer> midList=new ArrayList<>();
                    midList.add(nums[i]);
                    midList.add(nums[left]);
                    midList.add(nums[right]);
                    res.add(midList);
                    while (left < right && nums[left] == nums[left + 1]) {
                        left++; // 跳过重复元素
                    }
                    while (left < right && nums[right] == nums[right - 1]) {
                        right--; // 跳过重复元素
                    }
                    right--;
                    left++;
                }else if(nums[i]+nums[left]+nums[right]>0){
                    right--;
                }else{
                    left++;
                }
            }
        }
        return res;
    }

7、除自身以外数组的乘积

public int[] productExceptSelf(int[] nums) {
        int n=nums.length;
        int[] res=new int[n];
        int[] right=new int[n];
        right[n-1]=1;
        int[] left=new int[n];
        left[0]=1;
        for(int i=1;i<n;i++){
            left[i]=left[i-1]*nums[i-1]; 
        }
        for(int i=n-2;i>=0;i--){
            right[i]=right[i+1]*nums[i+1];
        }
        for(int i=0;i<n;i++){
            res[i]=left[i]*right[i];
        }
        return res;
    }

 8、轮转数组

    public void rotate(int[] nums, int k) {
        if(k==nums.length) return;
        resverse(nums,0,nums.length-1);
        resverse(nums,0,(k-1)%nums.length);
        resverse(nums,(k)%nums.length,nums.length-1);
    }
    public void resverse(int[] nums,int begin,int end){
        while(begin<end){
        int temp=nums[end]; 
        nums[end]=nums[begin];
        nums[begin]=temp;
        begin++;
        end--;
       }
    }

9、合并区间

 public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals,(int[] o1,int[] o2)->o1[0]-o2[0]);
        LinkedList<int []> list=new LinkedList<>();
        list.add(intervals[0]);
        for(int i=1;i<intervals.length;i++){
            int[] last=list.getLast();
            if(intervals[i][0]<=last[1]){
                last[1]=Math.max(intervals[i][1],last[1]);
            }else{
                list.add(intervals[i]);
            }
        }
        return list.toArray(new int[0][0]);
    }

10、最大子数组和

public int maxSubArray(int[] nums) {
        int res=0;
        int[] maxSum =new int[nums.length];
        maxSum[0]=nums[0];
        for(int i=1;i<nums.length;i++){
           if(maxSum[i-1]>0){
            maxSum[i]=maxSum[i-1]+nums[i];
           }else{
            maxSum[i]=nums[i];
           }
        }
        Arrays.sort(maxSum);
        return maxSum[nums.length-1];
    }

11、矩阵置零

public void setZeroes(int[][] matrix) {
        boolean[] row=new boolean[matrix.length];
        boolean[] col=new boolean[matrix[0].length];
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){
                if(matrix[i][j]==0){
                    row[i]=true;
                    col[j]=true;
                }
            }
        }
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){
                if(row[i]||col[j]){
                    matrix[i][j]=0;
                }
            }
        }
    }

12、螺旋矩阵

public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list=new ArrayList<>();
        int row=matrix.length;
        int col=matrix[0].length;
        int left=0;
        int right=col-1;
        int up=0;
        int down=row-1;
        while(list.size()<row*col){
            if(up<=down){
                for(int j=left;j<=right;j++){
                    list.add(matrix[up][j]);
                }
                up++;
            }
            if(left<=right){
                for(int j=up;j<=down;j++){
                    list.add(matrix[j][right]);
                }
                right--;
            }
            if(up<=down){
                for(int j=right;j>=left;j--){
                    list.add(matrix[down][j]);
                }
                down--;
            }
            if(left<=right){
                for(int j=down;j>=up;j--){
                    list.add(matrix[j][left]);
                }
                left++;
            }
        }
        return list;
    }

13、旋转图像

class Solution {
    public void rotate(int[][] matrix) {
        int m=matrix.length;
        for(int i=0;i<m;i++){
            for(int j=i;j<m;j++){
                int temp=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=temp;
            }
        }
        for(int i=0;i<m;i++){
            reserve(matrix[i],0,matrix[0].length-1);
        }
    }
    public void reserve(int[] nums,int begin,int end){
        while(begin<end){
            int temp=nums[begin];
            nums[begin]=nums[end];
            nums[end]=temp;
            begin++;
            end--;
        }
    }
}

14、搜索二维矩阵

public boolean searchMatrix(int[][] matrix, int target) {
        boolean res=false;
        int m=matrix.length;
        int n=matrix[0].length;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;){
                if(target==matrix[i][j]){
                    res=true;
                    return res;
                }
                if(target<matrix[i][j]){
                    break;
                }
                if(target>matrix[i][j]){
                    j++;
                }
                
            }
        }
        return res;
    }

15、无重复字符的最长字串

16、找到字符串中的所有字母异位词

17、和为K的子数组

18、相交链表

19、反转链表

20、回文链表

21、环形链表

22、合并两个有序链表


网站公告

今日签到

点亮在社区的每一天
去签到