数据结构与算法
文章平均质量分 52
课堂笔记整理
筑梦之人
这个作者很懒,什么都没留下…
展开
-
剑指Offer算法题11-20
11. 数字的整数次方描述:实现函数 double power(double base, int exp),求base的exp次方,不需要考虑大数问题。思路:需要考虑数字的负数次方和base为0的情况代码:public static double power(double base, int exp) { if (base == 0 && exp == 0) { throw new RuntimeException("0的0次方没有数学意义"); } if (原创 2021-09-16 11:45:38 · 83 阅读 · 0 评论 -
剑指Offer算法题03-10
03. 二维数组中查找描述:在一个二维数组中,每一行都从小到大排列,每一列都从上到下排列,实现查找目标数字是否在二维数组中存在思路:从最右一列开始或者最下一行开始,判断目标值是否小于(或者大于)该列(行)第一个值,用于淘汰该列或者该列或者行的依据代码:public static boolean exist(int[][] arr, int target) { if (arr == null || arr.length == 0 || arr[0].length == 0) { retur原创 2021-09-16 11:44:38 · 114 阅读 · 0 评论 -
算法笔记-第01节课
第01节课1. 选择排序思路:i~N-1找最小的放到第i号位置(i从0到N-1)代码:void selectSort(int[] arr) {if (arr == null || arr.length < 2) return; for (int i = 0; i < arr.length; i++) { int minIndex = i; for (int j = i; j < arr.length; j++) { if (arr[j] <原创 2021-09-13 15:05:00 · 68 阅读 · 0 评论 -
算法笔记-第02节课
第02节课1. 安位异或交换两个数如何不用额外变量交换两个数代码展示:static void swap(int[] arr, int i, int j) { if(arr == null || arr.length < 2 || i == j) return; arr[i] = arr[i]^arr[j]; arr[j] = arr[i]^arr[j]; arr[i] = arr[i]^arr[j];}2. 找出数组中唯一出现奇数次的数一个数组中有一种数出现了奇数次,其原创 2021-09-13 15:05:47 · 119 阅读 · 0 评论 -
算法笔记-第03节课
第03节课1. 单向链表反转思路:带头指针的链表可以不使用返回值进行翻转,不带头指针的必须有返回值,函数的形参改变不影响调用端的值,引用改变影响调用端。代码展示:// 带链表头public void reverse1(ListNode head) { if(head == null) return; ListNode ptr = head.next; ListNode ptrNext; head.next = null; // 这个必须置为null,否则会出现环 while(p原创 2021-09-13 15:06:40 · 87 阅读 · 0 评论 -
算法笔记-第04节课
第04节课1. 归并排序1.1 递归方式实现思路:数组一分为二,先保证分别有序,然后再合并为有序数组,一直拆分,直到最多只有以个元素(一定有序)时再归并代码:// 递归方式void mergeSort(int[] arr) { if (arr == null || arr.length < 2) { return; } process(arr, 0, arr.length - 1);}void process(int[] arr, int L, int R) {原创 2021-09-14 13:10:35 · 102 阅读 · 0 评论