编程题:
1.数组排序
冒泡排序:(main方法直接调用,传入数组)缺点时间复杂度为n*(n-1).
//冒泡排序
public static void bubbleSort(int arr []) {
int temp=0;//临时存储变量
for(int i=0;iarr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
2.一维数组转置
方案一:新建一个数组,反向循环取出给定数组元素,顺序存储在新建数组中,遍历即可。缺点:开辟了新的内存空间,占用资源。
//转置数组方案一
public static int[] reverseArray(int[] arr) {
int[] temp=new int[arr.length];
int foot=arr.length-1;//定义变量,赋值给定数组末尾元素
for(int i=0;i
方案二:折半对换首尾元素,以中间元素索引为参考转换次数(更优)
//转置数组方案二
public static void reverseArrayTwo(int[] arr) {
int center=arr.length/2;//转换次数
int head=0;//头部开始索引
int tail=arr.length-1;//尾部开始索引
int temp=0;//临时存储数据
for(int i=0;i
3.二维数组转置
// 二维数组转置
public static void doubleArrayReverse(int[][] arr) {
for (int i = 0; i < arr.length; i++) {//行数
for (int j = i; j < arr.length; j++) {//以i=j为中间轴,列数对应行数位置
if (i != j) {//如果列数和行数位置不对应,行和列的值对换
int temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
}
}
//二分查找/折半查找(数组有序)
public static int halfSearch(int[] arr,int from,int to,int key) {
int mid =from+(to-from)/2; //计算中间点,关键点。from:头部开始索引,初始为0,to:尾部结束索引,初始为数组长度length,key :查找的元素。
if(from<=to) {
if(arr[mid]==key) {
return mid;
}else if(arr[mid]key){
//查找元素key在左边,to修改为上一趟中间值的左边一位,递归调用
return halfSearch(arr, from, mid-1, key);
}else {
//无此元素,返回-1,表示不存在。
return -1;
}
}
return 0;
}
4.2无序数组查找
先排序,再利用二分法(折半)查找。
5.数组中两个元素之和=给定元素
【特殊:数组中有0,并且存在两个及以上相同的数据,需要排除重复(即判断两数不分顺序以及相同数据出现4次及以上组合)】
如int[] a={0,1,2,2,4,5,6,7} 如给定元素7=3+4;将会出现3和4;4和3两组值,给定元素4=2+2;(数组中存在两个2)将会出现4次2,2的组合。这些情况是不允许出现的,需要判断后,仅输入一次组合
//查找数组中两个元素之和=特定元素
public static void searchElement(int [] a,int key) {
int m=0,n=0;//定义两个变量,用于接收数组中可能存在的两个数之和=key
int count=0;//用于处理数组可能存在两个数之和=key,并且两数重复的次数。
for(int j=0;j
6.字符串转置
6.1stringBuffer转置 :reverse转换字符串。
public static String reverString(String str) {
return new StringBuffer().append(str).reverse().toString();
}
6.2charAt()方法,进行字符串的拼接
//charAt字符串的拼接
public static void reverseStringCharAt(String str) {
String s ="";
for(int i=0;i
7.字符串转换为字符数组
// 字符串转为字符数组
public static void reverseStringToChar(String str) {
char a[] = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
a[i] = str.charAt(i);
}
for (int k = 0; k < a.length; k++) {
System.out.print(" "+a[k]);
}
}
8.查找子字符串的位置
public static int searchString(String str,String toStr) {
return str.indexOf(toStr);
}
9.替换字符串中指定的字符
public static void replaceString(String str,String oldStr,String newStr) {
System.out.println(str.replaceAll(oldStr,newStr));//字符串方法,第一个参数是要替换的字符,第二个参数是新的字符
}
10.实现字符串首字母大写
public static String changeStr(String str) {
if(str==null || "".equals(str)) {//为null或者为空时,不作处理
return str;
}
if(str.length()==1) {//只有一个字符时,直接转换
return str.toUpperCase();
}
return str.substring(0, 1).toUpperCase()+str.substring(1);//截取0索引位置的字符,然后截取索引1之后的字符串,并进行拼接。
}
11.统计字符串中指定字符出现字数
public static void countString(String str,char a) {
int count=0;
char arr[]=str.toCharArray();//转换为字符数组
for(int i=0;i
【延伸】统计字符串中指定的两个字符的次数
public static void countString(String str,char a,char b) {
int[] count=new int[2];//分别存储两个字符统计次数
char arr[]=str.toCharArray();//转化为字符数组
for(int i=0;i