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