题目一.
这道题要先解释一下什么是非递增,非递增就是a[i] >a[i+1],递增则是相反.
非递减就是a[i]>a[i+1],递减就是相反
大方向思路是:
- 遍历数组
- 判断相邻元素的顺序关系
- 统计排序子序列数量
具体思路:
- 本题依次比较整个数组
- a[i+1]>a[i] ,则进入非递增序列判断,直到遍历到下一个值不大于等于为止count++,然后进行下一位
置的判断 - a[i+1]<a[i],则进入非递增序列判断,直到遍历到下一个值不小于等于为止count++,然后进行下一位
置的判断 - a[i+1] == a[i]不进行操作,++i进行下一位置遍历,因为相等既可以属于非递增序列,也可以属于非递减
序列。
注意的方向:
本题开始比较a[i+1]与a[i]进行比较,为了避免越界,数组定义为n+1个,同时给a[n] = 0;
a[n] = 0带来的影响,我们分为三种情况讨论:
- 若到a[n-1] 的最后一组是非递减序列,当i == n-1,a[i] >a[i+1],因为前面的数都是大于0的,这个输入
条件已经说明了(去看看题目输入条件描述),里面的循环结束,i++,count++,i==n,外面的循环结束。 - 若到a[n-1] 的最后一组是非递增序列,当 i== n-1,a[i] >a[i+1],因为前面的数都是大于0的,这个输入
条件已经说明了(去看看题目输入条件描述),循环再走一次,i++, i== n,里面的循环结束,i++,
count++,i==n+1,外面的循环结束。 - 第三种情况 1 2 1 2 1最后一个数是单独的情况,后面补个0,序列变成1 2 1 2 1 0,当走完全面的序列
i==n-1时,a[i] > a[i+1],进入判断出一个非递增序列,count++,i++,循环结束。 - 也就是说数组最后一个位置多增加一个0,不会影响第1、2情况的判断,主要是帮助第3情况的正确判断。
代码如下:
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n=in.nextInt();
//给出长度,以防止越界操作
int[] array=new int[n+1];
for(int i =0;i<n;i++){
array[i]=in.nextInt();
}
int i=0;
int count=0;
while(i<n){
//进入非递减序列
if(array[i]<array[i+1]){
while(i<n && array[i] < array[i+1]){
i++;
}
count++;
i++;
}else if(array[i] == array[i+1]){
i++;
}else{
while(i< n && array[i]>=array[i+1]){
i++;
}
count++;
i++;
}
}
System.out.println(count);
}
}
题目二
倒置字符串
这里注意的是,它的标点符号不逆置文章来源:https://www.toymoban.com/news/detail-552605.html
具体的思路如下:
1.先逆置一段字符串中的前后单词进行置换
2.再逆置每个单词
文章来源地址https://www.toymoban.com/news/detail-552605.html
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void reverse(char[] array,int start,int end){
while(start < end){
char tmp =array[start];
array[start] =array[end];
array[end]= tmp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s=in.nextLine();
char[] ch=s.toCharArray();
int len=ch.length;
//对整体进行了逆置
reverse(ch,0,len-1);
//.beijing like i
// 注意 hasNext 和 hasNextLine 的区别
//对标点符号进行处理
int i=0;
while(i <len){
int j =i;
while(j <len && ch[j] !=' '){
j++;
}
if(j < len){
reverse(ch,i,j-1);
i=j+1;
}else{
reverse(ch,i,j-1);
i=j;
}
}
String str=new String(ch);
System.out.println(str);
}
}
到了这里,关于刷题记录01的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!