1、搜素二维矩阵
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
分析思路:二维数组,从上到下依次递增,从左到右也是依次递增,如图所示,从行最大的元素开始
查,比该位置元素的数字大的col++;比起元素小的row--,直到遍历完二维元素,row<0或者
col>arr[0].length,这样减少了遍历数组的次数,能够更快的查到元素。
public class Solution {
public boolean Find(int target, int [][] array) {
//判断二维数组是否为空
if(array==null||array.length==0||array[0].length==0){
return false;
}else{
//获取行的最大行数,并从此处开始查询,比较此处元素是否比指定元素是否相同
int row=array.length-1;
int col=0;
//查询出二维数组,row--之后col++;开始遍历二维数组,查找元素,
while(row>=0&&col<array.length){
//如果此角标元素比给定的元素大,row--
if(array[row][col]>target){
row--;
//如果角标元素小于给定元素。col++;
}else if(array[row][col]<target){
col++;
//如果角标元素等于给定的元素,返回true
}else{
return true;
}
}
}
return false;
}
}
2.替换字符串
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
分析思路:通过构建动态字符串;首先遍历字符串,并把每个字符取出来,添加到构建的动态字符串
中,并比较去除的字符是否为空格,如果为空格,添加‘%’,‘2’,‘0’三个字符,最终返回动态字符串
public String replaceSpace(StringBuffer str) {
//首先判断字符串是否为空,如果为空,无法用空格替换“%20”
if(str==null){
return null;
}
//获取字符串长度,重新创建一个动态变化的字符串,根据字符长度,取出给定字符串中的字符
//如果取到空字符串进行替换操作,向动态字符窗中添加“%20”字符,每次只能添加一个字符
//如果不是空字符串,将str.charAt(i)中的字符添加到动态字符串中
int len=str.length();
StringBuilder sb = new StringBuilder();
for(int i=0;i<len;i++){
char c=str.charAt(i);
if(c==' '){
sb.append('%');
sb.append('2');
sb.append('0');
}else{
sb.append(String.valueOf(str.charAt(i)));
}
}
return new String(sb);
}
}
3.字符串反转
题目描述:给定一个字符串,例如“I like beijing.,创建一个函数进行字符串的反打印,打印结果 ”beijing. like I;
分析思路:通过创建字符串数组将字符添加到字符串数组当中,此处用到split()方法,split() 方法用于
把一个字符串分割成字符串数组,并进行角标从未到头的遍历,并将其传到新的字符串数组中
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String str =scanner nextLine();
//以空格分割字符串构建字符串数组
String[] str1 =str.split(" ");
for(int i=0;i<str1.length;i++){
System.out.println(str1[str1.length-i-1]+" ");
}
4.循环链表
题目描述:给定一个链表,判断链表是否是循环链表
思路分析:此处用到快慢指针,快指针到位之后如果为节点的元素的下一个元素为空,那么
该链表为空,尾节点的下一个节点不为空,通过指针的移动,最终慢指针会与快指针相遇
如图下所示
没有环的情况下
图一
图二
图四
.
图四 fast.next=null&&slow!=fast
有环的情况下 fast=fast.next.next 而 slow =slow.next;
图一
图二
图三
图四
代码如下
public class Solution {
public boolean hasCycle(ListNode head) {
if(head==null||head.next==null){
return false;
}
ListNode fast=head;
ListNode slow=head;
while(true){
if(fast==null||fast.next==null){
return false;
}
fast=fast.next.next;
slow=slow.next;
if(slow==fast){
return true;
}
}
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}