Leetcode——编程之解

1、算法编程——数组:打印杨辉三角形——118

import java.util.*;
class Demo118{
    public static Scanner input=new Scanner(System.in);
    public static void main(String[] args){
        System.out.print("请输入想要打印杨辉三角形的行数:");
        int numRows=input.nextInt();
        generate(numRows);
    }
    public static void generate(int numRows) {
        int[] arr=new int[0];
        /*
        先是打印空格
         */
        for(int j=1;j<=numRows;j++){
            for(int i=1;i<=numRows-j;i++){
                if(i==1){
                    System.out.print(" ");
                }else{
                    System.out.print("  ");
                }
                
            }
            /*
            对数组扩容,其长度每一次加一
             */
            arr=copyOf(arr);
            System.out.println(Arrays.toString(arr));
        }
        
    }
    /*
    数组扩容
     */
    public static int[] copyOf(int[] arr){
        int[] newArr=new int[arr.length+1];
        /*
        因为杨辉三角形的第一个行元素和第二行元素都为一
         */
        if(newArr.length==1||newArr.length==2){
            for(int i=0;i

2、 ——169

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入: [3,2,3]
输出: 3

 

import java.util.*;
class Demo169{
    public static void main(String[] args){
        int[] arr={3,3,4};
        System.out.println(lookUp(arr));
        System.out.println(majorityElement(arr));
    }
    /*
    适用地方就是一组数据中重复出现的次数大于该组数据的二倍
     */
    public static int lookUp(int[] arr){
        /*
        因为是从第二个元素开始查起
         */
        int count=1;
        /*
        从第二个元素开始查,首先将第一个元素存起来
         */
        int temp=arr[0];
        /*
        从数组的第二位开始遍历,如果遇到相同的则count+1,否则count-1
            例:1   3   1   3   1   4   1

         */

        for(int i=1;imax){
                max=nums[i];
            }
            if(nums[i]newMax){
                newMax=newNums[i];
                index=i;
            }
        }
        return index+min;
    }
}

3、 ——209

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。

示例: 

输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。

 

/*
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。

示例: 

输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。
*/
class Demo209{
    public static void main(String[] args){
        int[] nums=new int[]{2,3,1,2,4,3};
        System.out.println(isMinLen(nums));
    }
    public static int isMinLen(int[] nums){
        int len=0;//记录子数组的长度长度
        /*
        第一个指针,表示虚拟的数组下表
         */
        int i=0;
        /*
        表示一组数据中连续的数据之和
         */
        int sum=0;
        /*
        开始遍历该数组
         */
        for(int j=0;j=7){
                /*
                如果大于——由于i为虚拟的下标,当j遍历到3时,sum大于7
                因此该子序列的长度给len,并把每一次最小的长度赋值与len
                 */
                if(len<=j-i+1){
                    len=j-i+1;
                }else{
                    len=Math.min(len,j-i+1);
                }
                /*
                由题意知在该数据中找的是子数组中的元素之和大于等于7的最小长度的子数组
                因此在该sum上又开始减去该数组的第一个元素,如果sum小于,则j++
                 */
                sum-=nums[i++];
            }
        }
        return len;
    }
}

4、 ——1295

难度简单26给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。

 

示例 1:

输入:nums = [12,345,2,6,7896]
输出:2
解释:
12 是 2 位数字(位数为偶数) 
345 是 3 位数字(位数为奇数)  
2 是 1 位数字(位数为奇数) 
6 是 1 位数字 位数为奇数) 
7896 是 4 位数字(位数为偶数)  
因此只有 12 和 7896 是位数为偶数的数字

 

class Demo1295{
    public static void main(String[] args){
        int[] num={1,2345,12,7};
        count(num);
    }
    public static void count(int[] num){
        /*
        count1记录的是每一个数组中的元素的位数
        count2记录的是每一个数组中的元素的位数是否是偶数
         */
        int count1=0,count2=0;
        /*
        开始遍历数组
         */
        for(int i=0;i

5、 ——283

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

 

import java.util.*;
class Demo283{
    public static void main(String[] args){
        int[] nums=new int[]{1,0};
        moveZeroes(nums);
    }
    public static void moveZeroes(int[] nums) {
        int temp=0,count1=0,count2=0;
        /*
        首先记录该组数据中0的个数
         */
        for(int i=0;i

 

 

 

 

 

你可能感兴趣的:(Leetcode)