剑指offer1

1.在这里插入图片描述

package com.example.test;

public class offer01 {
	public boolean Find(int target, int[][] array) {
		int lines = array.length;
		int cols = array[0].length;

		int x = 0;
		int y = cols - 1;

		while (x < lines && y >= 0) {
			if (array[x][y] == target)
				return true;
			if (array[x][y] > target)
				y--;
			else
				x++;

		}
		return false;
	}
}

2.在这里插入图片描述

package com.example.test;

public class offer02 {
	// 直接替换

	public String replaceSpace(StringBuffer str) {
		// return str.toString().replace("", "%20");

		// 手动模拟;
		StringBuffer result = new StringBuffer();
		for (char ch : str.toString().toCharArray()) {
			if (ch == ' ')
				result.append("%20");
			else
				result.append(ch);
		}
		return result.toString();
	}

	public static void main(String[] args) {
		String result = new offer02().replaceSpace(new StringBuffer("we are happy"));
		System.out.println(result);
	}
}

String:不可变,final声明的字符数组
StringBuilder:可变,不加锁,速度快
StringBuffer:可变,加锁,线程安全,速度慢一点

3.在这里插入图片描述

package com.example.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class offer03 {

	public static void main(String[] args) {
		//直接使用Collections的逆序操作函数
		ArrayList a = new ArrayList();
		a.add(1);
		a.add(2);
		a.add(3);
		a.add(4);
		a.add(5);
		Collections.reverse(a);
		System.out.println(a);
		
		//ArrayList插入,新插入的元素会把之前的往后顶
		a=new ArrayList();
		a.add(0, 1);
		a.add(0, 2);
		a.add(0, 3);
		a.add(0, 4);
		a.add(0, 5);
		System.out.println(a);		
	}
}
ArrayList是list接口的可变数组的实现。查询快,增删慢。
LinkedList是List接口的双向链表的实现。查询慢,增删快

插入,把前一个推到后面在这里插入图片描述
递归在这里插入图片描述
4.在这里插入图片描述

public class BuildTree {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root=ConstructCore(pre,0,pre.length-1,in,0,in.length-1);
        return root;
    }
 
    public TreeNode ConstructCore(int[] pre,int startPre,int endPre,int[] in,int startIn,int endIn)
    {
        if(startPre>endPre||startIn>endIn)
            return null;
        TreeNode node = new TreeNode(pre[startPre]);
        for(int i=startIn;i<=endIn;i++)
        {
            if(in[i]==pre[startPre])
            {
                node.left = ConstructCore(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
                node.right =ConstructCore(pre,startPre+i-startIn+1,endPre,in,i+1,endIn);
                break;
            }
        }
        return node;
 
    }
}
 
class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode(int x) { val = x; }
 }

5.在这里插入图片描述
在这里插入图片描述
6.
在这里插入图片描述
在这里插入图片描述
7.斐波那契数列
在这里插入图片描述
递归
在这里插入图片描述
常规在这里插入图片描述
优化存储
在这里插入图片描述
8/9.斐波那契数列在这里插入图片描述
在这里插入图片描述
10.斐波那契数列
在这里插入图片描述
在这里插入图片描述
11.在这里插入图片描述

public class offer05 {
	public static void main(String[] args) {
		System.out.println(new offer05().number(10));
	}

	public int number(int n) {
		int ans = 0;
		for (int i = 0; i < 32; i++) {
			if ((n & 1) == 1)
				ans++;
			n = n >> 1;
		}
		return ans;
	}
}

12.在这里插入图片描述
偶数冒泡排序,奇数冒泡排序

public class offer06 {
	public static void main(String[] args) {
		int[] arr = new int[] {4,3,1,2,2,5};
		new offer06().reoder(arr);
		System.out.println(Arrays.toString(arr));
	}

	public void reoder(int[] array) {
		for (int i = array.length - 1; i >= 0; i--) {
			for (int j = 0; j + 1 <= i; j++) {
				if (array[j] % 2 == 0 && array[j + 1] % 2 == 1) {
					swap(array, j, j+1);
				}
			}
		}
	}

	public void swap(int[] array, int i, int j) {
		int t = array[j];
		array[j] = array[i];
		array[i] = t;
	}
}

13.在这里插入图片描述
在这里插入图片描述
14.
在这里插入图片描述
在这里插入图片描述
15.
v
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值