DayN剑指offer刷题

被大佬疯狂diss的一天,说我的代码写的很烂,是坨粑粑。再来五年还不如人家大学本科一年的好。并且说我没有编程思维,不知道如何把自己的想法弄成代码实现。

展示了一下如何写树的前序递归,首先忘了判空,其次写了半天才用链表输出。丢人

菜鸡学习的一天。勤能补拙吧。

判空 递归 分模块实现

package offer;

import java.util.ArrayList;
import java.util.List;

//树递归
class Tree {
    int val;
    Tree left;
    Tree right;

    public Tree(int val) {
        this.val = val;
    }

    public Tree() {
    }
}

public class Test12 {
    /**
     * 传进一棵树
     *
     * @param root
     * @return
     */
    public static List<Integer> preOrderReader(Tree root) {
        List<Integer> list = new ArrayList<>();
        preOrder(root, list);
        return list;
    }

    /**
     * 传进去的树 传进去的列表
     *
     * @param root
     * @param list list是空值 在里面添加
     */
    public static void preOrder(Tree root, List<Integer> list) {
        //递归出口
        if (root == null)
            return;
        list.add(root.val);
        preOrder(root.left, list);
        preOrder(root.right, list);
    }

    public static void main(String[] args) {
        //新建一个树
        Tree tree1 = new Tree(2);
        Tree tree2 = new Tree(1);
        Tree tree3 = new Tree(3);
        tree1.left = tree2;
        tree1.right = tree3;
        //直接输出数值
        System.out.println(preOrderReader(tree1));
        //构建容器保存下来
        List<Integer> list = preOrderReader(tree1);
        System.out.println(list);

    }
}

get set方法的讲解

作为Java开发,你一定要了解面向对象编程中为什么要使用get和set方法_阿飞云的博客-CSDN博客_为什么要用get和set方法一、由一个问题开始在进行面向对象开发中,在编写一个Class的时候,会定义这个Class的属性(字段)为Private,然后去生成对应的get和set方法,通过这样的方式去对属性进行操作,那你有没有思考过为什么要这样做呢?这样做有哪些好处呢?请先自行思考30秒,在看下面的内容。二、回顾相关知识回答这个问题之前,让我们先回顾一些的基础知识:1、访问修饰符,从访问的范围由小及大依次是:pri...https://aflyun.blog.csdn.net/article/details/88095865?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-88095865-blog-52725245.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-88095865-blog-52725245.pc_relevant_aa&utm_relevant_index=1关于面向对象编程中很多人用get()和set()方法,而不用public的一点总结_llittlebird001的博客-CSDN博客在很多程序中,都喜欢定义一个privata变量,然后为这个私有变量加上get(),set()方法。那为什么不直接定义一个public变量呢?这样做到底有什么好处和意义呢?难道真的仅仅只是为了代码规范?别逗了,不管你信不信,反正我是不信!带着这个问题我在网上寻找答案,真是众说纷纭啊,每个人都能说出一点点道理,但是却都不足以说服我!(所以在这里做一些总结,和大家分享,我们共同学习,共同进步。如果有什么https://blog.csdn.net/llittlebird001/article/details/52725245

  •  前k小的数--变形的快速排序
    package offer;
    
    /*
    1 快速排序
    2 输入n个整数,找出其中最小的k个数。
        方法一:全部排一遍 输出前K个数
        方法二:
     */
    public class Test16 {
        /**
         * 左边位索引 右边索引
         *
         * @param arr
         * @param left
         * @param right
         */
        public static void quickSort(int[] arr, int left, int right) {
            //不合法情况 结束判断
            if (left > right)
                return;
            //准备所需要的变量 保存基准数
            int base = arr[left];
            int i = left, j = right;
            //开始检索 重复的操作 i与j相遇的时候停止一次检索
            while (i != j) {
                //先由j从右往左  移动比基准数小的while这个条件不成立
                //检索不能越界
                while (arr[j] >= base && i < j)
                    j--;
                //由i从右往左走  移动比基准数大的
                while (arr[i] <= base && i < j)
                    i++;
                //代码走到这里停下来了 需要交换两个不在应该存在位置的数
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            //已经划分好一次左右两边区间了 两个相遇了一次
            //相遇位置
            arr[left] = arr[j];
            //再把基准数赋值给相遇位置的数
            arr[j] = base;
            //左边的数都比他小 右边的都比他大
            quickSort(arr, left, i - 1);
            quickSort(arr, j + 1, right);
        }
    
    
        public static void main(String[] args) {
            int[] arr = {4, 7, 8, 1, 2, 3, 5, 6,};
            quickSort(arr, 0, 7);
            for (int i : arr) {
                System.out.println(i);
            }
    
        }
    }
    

    用小根堆 大根堆的还没有看到。。。谷歌的题目是两个数组任意的和的中位数 取前k个。。我只能说我不配进谷歌

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值