1 最后一个单词的长度
给定一个仅包括大小写字母和空格 ‘ ’ 的字符串 , 返回其最后一个单词的长度
如果不存在最后一个单词,请返回0
说明 : 一个单词是指由字母组成,但不包括任何空格的字符串
示例 :
输入 : “Hello World”
输出 : 5
public static void main(String[] args) {
String str = "hello world";
int result = lastWord(str);
System.out.println("最后一个单词的长度为" + result);
}
// 读取字符串中每一个字符,如没有遇到空格则 + 1, 遇到空格则重新读取字符
// 如没有最后一个单词则返回0
public static int lastWord(String str) {
if (str.length() == 0 && str == null) {
return 0;
}
int x = 0;
int last = 0; // 记录最后一个单词长度
for (int i = 0; i < str.length(); i++) {
// 假如字符串最后一个字符为 ' ' , 则将x重新赋值为0, 直到最后一个单词读取完将x的值赋值给last
// str.charAt(i)为在字符串str中, 第 i 个字符的值. 默认也是从0开始
if (str.charAt(i) == ' ') {
x = 0;
} else {
x++;
last = x;
}
}
return last;
}
2 合并两个有序数组
给定两个有序整数数组,nums1 和nums2 ,将nums2合并到nums1中,使得nums1成为一个有序数组
说明 : 初始化 nums1 和 nums2 的元素数量分别为 m 和 n
你可以假设nums1有足够的空间(空间大小大于或等于 m+n),来保存nums2中的元素
示例 :
输入 : nums1 = {1,2,3,0,0,0} m = 3;
nums2 = {2,5,6} n=3
输出 : {1,2,2,3,5,6}
public static void main(String[] args) {
int[] nums1 = { 1, 1, 2, 3, 4, 5, 6, 7 };
int[] nums2 = { 0, 2, 3, 5, 6, 6, 7, 8, 9 };
int[] nums3 = new int[(nums1.length) + (nums2.length)];
int x = 0;
// 将nums1中的数据传给nums3
for (int i = 0; i < nums1.length; i++) {
nums3[x] = nums1[i];
x++;
}
// 将nums2中的数据传给nums3
for (int i = 0; i < nums2.length; i++) {
nums3[x] = nums2[i];
x++;
}
// 冒泡排序nums3
for (int i = 0; i < nums3.length - 1; i++) {
for (int j = 0; j < nums3.length - 1 - i; j++) {
if (nums3[j] > nums3[j + 1]) {
int temp = nums3[j + 1];
nums3[j + 1] = nums3[j];
nums3[j] = temp;
}
}
}
// 输出nums3
for (int i = 0; i < nums3.length; i++) {
System.out.print(nums3[i] + " ");
}
}
3 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写
说明 : 本题中,我们将空字符串定义为有效的回文串,和回文数一样,正读反读一样
示例 1
输入 : “A man , a plan , a canal : Panama”
输出 : true
示例 2
输入 : “race a car”
输出 : false
4 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找出那个只出现一次的元素
说明 : 你可以不使用额外空间来实现吗?
示例 1
输入 : {2,2,1}
输出 : 1
示例 2
输入 : {4,1,2,1,2}
输出 : 4
public static void main(String[] args) {
int[] arr = { 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6 };
// 从第一个数开始和后面所有数据作比较,如发现有一样的数据则从下两个开始重新比较,当出现不一样的输出x即可.
for (int i = 0; i < arr.length - 1;) {
if (arr[i] == arr[i + 1]) {
i = i + 2;
} else {
System.out.println("只出现一次的元素为" + arr[i]);
break;
}
}
}
5 加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一,
最高位数字存放在数组的首位,数组中每个元素只存储一个数字
你可以假设除了整数0之外,这个整数不会以 零 开头
示例 1
输入 : {1,2,3}
输出 : {1,2,4}
解释 : 输入数组表示数字 123.
示例 2
输入 : {4,3,2,1}
输出 : {4,3,2,2}
解释 : 输入数组表示数字 4321.
public static void main(String[] args) {
int[] arr = {5,3,2,1,6,7,9};
//首先将第一位 * 10后赋值给num1变量 , 之后每次赋值前将num1的所有数升位加上下一位数据
int num1=0;
for (int i = 0; i < arr.length; i++) {
num1 =num1*10+ arr[i];
}
System.out.println("数组表示数字为" +num1 );
//其次取出数组尾部值将其加一后赋给尾部
int x=arr[arr.length-1];
arr[arr.length-1]= x+1;
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}