1.力扣原题:最长不重复序列
import java.util.*;
public class kuaishou {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String s=in.nextLine();
System.out.println(longestPalindrome(s));
}
public static String longestPalindrome(String s){
if(s==null ||s.length()==0){
return "";
}
int[] range=new int[2];
char[] str=s.toCharArray();
for(int i=0;i<s.length();i++){
i=findLongest(str,i,range);
}
return s.substring(range[0],range[1]+1);
}
public static int findLongest(char[] str,int low,int[] range){
//查找中间部分
int high=low;
while(high<str.length-1 &&str[high+1]==str[low]){
low--;
high++;
}
int ans=high;
//从z中间向左右扩散
while(low>0 &&high<str.length-1 &&str[low-1]==str[high+1]){
low--;
high++;
}
if(high-low>range[1]-range[0]){
range[0]=low;
range[1]=high;
}
return ans;
}
}
2.左边的数比它小,右边的数比它大
import java.util.*;
public class kuaishou {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();
int[] array=new int[n];
int index=0;
while(index<n){
array[index]=sc.nextInt();
index++;
}
int[] mos=new int[n];
findMiddle(array,mos);
for (int i = 0; i < array.length; i++) {
if (mos[i] == 2) {
System.out.print(array[i]);
System.out.print(" ");
}
}
}
public static void findMiddle(int[] arr,int[] mos){
if (null == arr || arr.length <= 2) {
return;
}
int max = 0;
int min = arr.length-1;
for (int i = 0; i < arr.length; i++) {
//max=arr[max]<=arr[i]?i:max;
if(arr[max]<=arr[i]){
max=i;
}
if (max == i) {
mos[i]++;
}
}
for (int i = arr.length-1; i >=0; i--) {
//min=arr[min]>=arr[i]?i:min;
if(arr[min]>=arr[i]){
min=i;
}
if (min == i) {
mos[i]++;
}
}
}
}
用两个栈实现队列:力扣面试题09
class CQueue {
LinkedList<Integer> stack1;
LinkedList<Integer> stack2;
public CQueue() {
stack1 = new LinkedList<>();
stack2 = new LinkedList<>();
}
public void appendTail(int value) {
stack1.add(value);
}
public int deleteHead() {
if (stack2.isEmpty()) {
if (stack1.isEmpty()) return -1;
while (!stack1.isEmpty()) {
stack2.add(stack1.pop());
}
return stack2.pop();
} else return stack2.pop();
}
}
出现1的次数:力扣233
import java.util.*;
public class kuaishou {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(count(n));
}
public static int count(int n){
int base = 1;
int count = 0;
int weight = 0;
int round = 0;
int temp = n;
while(temp>0){
weight = temp%10;
round = temp/10;
temp = round;
count += round*base;
if(weight>1){
count += base;
}else if(weight == 1){
count += n%base+1;
}
base = base*10;
}
return count;
}
}
力扣1302:最深叶子结点的和
class Solution {
public int deepestLeavesSum(TreeNode root) {
if (root == null) return 0;
int num = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
num = 0;
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
num += node.val;
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
}
return num;
}
}
剑指offer:全排列
import java.util.ArrayList;
import java.util