领扣习题

xcl在这里插入图片描述

class solution1313{
	public int[] decompressRLElist(int[] nums){
		int len=0;
		for(int i=0;i<nums.length;i+=2){
			len+=nums[i];
		}
		int[] arr = new int[len];
		int intdex=0;
		for(int i=1;i<nums.length;i+=2){
			for(int j=0;j<nums[i-1];i++){
				arr[index++]=nums[i]
			}
		}
		return arr;

	}
}

在这里插入图片描述

import java.util.*;
class Q66{
	public static void main(String[] args){
		int[] digits={9,8,7,6,5,4,3,2,1,0};
		System.out.println(Array.toString(plusOne(digits)));
	}
	public static int[] plusOne(int[] digits){
		int carry=1;
		for(int i=digits.length-1;i>=0;i--){
			int num=digits[i]+carry;
			digits[i]=num%10;
			carry=num/10;
			if(carry==0){
				break;
			}
		}
		if(carry==1){
			int[] arr= new int[digits.length+1];
			arr[0]=1;
			return arr;
		}
		return digits;
	}
}

在这里插入图片描述

class Q{
	public int majorityElement(int[] nums){
		//不使用排序 在O(n)解决
		int m=nums[o];
		int count=1;
		for(int i=1;i<nums.length;i++){
			if(nums[i]==m){
				count++;
			}else{
				count--;
				if(count==0){
					m=nums[i];
					count=1;
					
				}
			}
		}
		return m;
	}
}

在这里插入图片描述

class Q209{
	public int minSubArrayLen(int s,int[] nums){
		int len=0;
		int i=0;
		int sum=0;
		for(int j=0;j<nums.lenth;j++){
			sum+=nums[j];
			while(sum<=s){
				len=len==0?(j-j+1):Math.min(len,j-i+1);
				sum-=sums[i];
				i++;
			}
		}
		return len;
	}
}

在这里插入图片描述

class Q283{
	public void moveZeroes(int[] nums){
		int k=0;
		int temp=0;
		for(int i=0;i<nums.length;i++){
			if(nums[i]!=0){
				temp=nums[i];
				nums[i]=nums[k];
				nums[k]=temp;
				k++;
			}
		}
	}
}

在这里插入图片描述

class Q674{
	public static void main(String[] args){
	int [] nums={2,2,2,2};
	int len=findLengthOfCLS(nums);
	System.out.println(len);
}
	public static int findLengthOfLCIS(int[]nums){
		if(nums.length==0||nums.length==1){
			return nums.length;
		}
		int maxL=0;
		int maxR=0;
		int r=0;
		int maxCount=1;
		for(int i=0;i<nums.length-1;i++){
			if(int i=0;i<nums.length-1;i++){
				if(nums[i+1]>nums[i]){
					count++;
					r=i+1;
					
				}else{
					l=i+1;
					r=i+1;
				}
				if(count>maxCount){
					maxCount=count;
					maxL=L;
					maxR=r;
				}
			}
		}
		System.out.println(maxL+"~"+maxR);
		
	}
}

在这里插入图片描述

class Q724{
	public int pivotIntdex(int[] nums){
		int sum=0;
		for(int sum:nums){
		sum+=num;
		}
		int leftSum=0;
		int right=0;
		for(int i=0;i<nums.length;i++){
			if(i==0){
				leftSum=0;
			}else{
				leftSum+=nums[i=1];
				
			}
			rightSum=sum-nums[i]-leftSum;
			if(rightSum==leftSum){
				return i;
			}
		}
		return -1;
	}
}

在这里插入图片描述

class Q905{
	public int[] sortArrayByParity(int[] A){
		int left=0;
		int right=A.length-1;
		while(left<rigth){
			if(A[left]%2==1&&A[right]%2==0){
				int temp=A[left];
				A[left]=A[right];
				A[right]=temp;
				
			}else if(A[left]%2)==0&&A[right]%2==0){
				left++;
				right--;
				
			}else  if(A[left]%2==0&&A[right]%2==0;){
				left++;
			}else{
				right--;
			}
		}
		return A;
	}
}

在这里插入图片描述

class Q{
	public boolean canThreePartsEqualSum(int[] A){
		int sum=0;
		for(int num:A){
		sum+=num;
		}
		int key=sum/3;
		int group=0;
		for(int i=0;i<A.length;i++){
			key-=A[i];
			if(key==0){
				group++;
				key=sum+3;
			}
		}
		return group==3;
	}
}

在这里插入图片描述

class Q1295{
	public int findNumbers(int[] nums){
		int count=0;
		for(int i=0;i<nums.length;i++){
			if((nums[i]+" ").length()%2==0){
				count++
				
			}
		}
		return count;
	}
}

在这里插入图片描述

/*
题解     
这道题的思想是 用一个for循环来标识三个数中的第一个,再用 right 和 left 两个指针来控制另外两个,在比较的时候,如果大于上一次的则让right-1表示对三个数的和进行缩小,如果小于则让left+1 在这里如果关注比原来的小的情况下,则有可能会丢失一部分数据,一部分可能无法得到实验

*/
class Q{
	public int  threeSumClosest(int[] nums, int target){
		Array.sort(nums);//Array.sort()将数组进行从小到大排序
		int result = nums[0] + nums[1]  + nums[2];//定义三数之和,因为后面是需要比较的所以直接将result赋值为前三个数之和
		for(int i = 0;i < nums.length-2;i++ ){
			int left = i+1
			int left = right-1;
			while(left != right){
				int sum = nums[i] + nums[left] + nums[right];
				if(Math.abs(sum - tagret)<Math.abs(result - tagret)){
				result = sum;//这里指的是如果第二次算的值如果离目标更接近的话,则对将result换成更小的
					if(sum > tagret){//如果sum的值大的话就将right后移 表示将sum的值缩小,同理left++表示将sum的值增大,(这里是从小到大排列的)
					//虽然我们追求的是result最小,但是如果left不前移的话 会丢失一部分数据,是的一些数据无法得到检验;最后造成答案错误
						right--;
					
					}else{
						left++;
				}
				}
			}
		}
		return result;
		
	}
		
	
}

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
在这里插入图片描述`import java.util.HashSet;
import java.util.Set;

public class TheLongestString {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	 // 哈希集合,记录每个字符是否出现过
	String s = "ccccccccc";
	
    Set<Character> occ = new HashSet<Character>();
    int n = s.length();
    // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
    int rk = -1, ans = 0;
    for (int i = 0; i < n; ++i) {
        if (i != 0) {
            // 左指针向右移动一格,移除一个字符
            occ.remove(s.charAt(i - 1));
        }
        while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
            // 不断地移动右指针
            occ.add(s.charAt(rk + 1));
            ++rk;
        }
        // 第 i 到 rk 个字符是一个极长的无重复字符子串
        ans = Math.max(ans, rk - i + 1);
    }
   System.out.println(ans);

}

}
`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值