自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 数据结构:数组

手写一个动态数组:package com.imooc.dataStructure.array;/** * @author zy */public class MyArray<E> { private E[] data; private int size; //构造函数,传入数组的容量capacity构造Array public MyArray(int capacity) { data = (E[]) new Object[...

2021-12-14 22:48:14 102

原创 插入排序两种思路

public static <E extends Comparable> void sort(E[] arr) { for (int i = 0; i < arr.length; i++) { E temp = arr[i]; int j; for (j = i; j >= 1 && temp.compareTo(arr[j - 1]) < 0; j--) { .

2021-11-17 22:06:37 221

原创 字符串压缩

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例: 输入:"aabcccccaaa" 输出:"a2b1c5a3"定义两个指针,右指针在前,左指针在后,左右两指针比较,相等,右指针向后挪,不相等,新字符串添加左指针指向的字符,添加right-left的得数,左指针挪到右指针所在的位置,右指针++。循环到

2021-11-17 09:58:44 1127

原创 定义一个选择排序工具类(写成通用类)

首先 先写一个最基础的选择排序:每次循环从下标为i的位置往后找数组最小值 ,记下最小值下标,内层循环结束交换最小值元素和下标为i的元素的位置,外层循环控制整体交换次数。public class SelectSore { public static int[] selectSort(int[] arr) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { int

2021-11-15 14:55:51 248

原创 无重复字符的最长子串

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。比如:输入: s = "abcabcbb" 输出: 3 因为无重复字符的最长子串是 "abc",所以其长度为 3。package com.woniuxy.java.test.stage1.week2.OO;public class Test { public static int lengthOfLongestSubstring(String s) { int x ...

2021-11-11 21:58:01 190

原创 简单的复杂度分析

复杂度分析是表示算法的性能的。一般考虑算法复杂度是考虑算法的最坏的情况。不能寄托希望在运气上,不看具体的测试用例,做出最差的预估。表示算法运行的上界,不可能比这个情况再差。使用n来表示数据规模。使用T来表示时间。类似于这样人肉分析代码是没意义的,所以有复杂度的概念诞生。例如O(n)表示的意思是,这个算法运行的时间,只和数据规模的大小有关,描述的是随着数据的增大,算法性能的变化趋势。常数是不重要的。在计算时间复杂度时要明确n的具体含义。时间复杂度它本...

2021-11-11 16:19:44 205

原创 循环不变量

以上为一个最简单的线性查找算法。(记得在调用类里重写equals(),不然可能比对的是地址)所谓循环不变量就是在每次循环的时候,都满足的一个条件。循环体中要维持循环不变量,如果一直维持,可以“证明”算法正确性在写for循环时要清楚的明白我写的这层for循环在干什么,即为明白这个循环体的循环不变量是什么。写算法时,要清楚的定义函数的功能,明确输入和输出都是什么。比如我们这个线性查找:...

2021-11-11 15:56:16 2118

原创 有序数组中查找符合相加等于给定的数的两个值,并返回下标

给定一个已按照 非递减顺序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。示例:输入:numbers = [2,7,11,15], ...

2021-11-10 16:01:37 480

原创 翻转字符串中的单词

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:"Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"public String reverseWords(String s) { StringBuffer ret = new StringBuffer(); int length = s.length(); int i = 0;

2021-11-10 15:57:52 185

原创 移动数组中的0至数组末尾

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]想法:双指针i,b 都从左边开始,定义一个count记下0的次数 循环结束后在数组后面补上相应数量的0每次循环i向右挪一位,判断当前数是否为0,为0,count++,不为零,将这个数赋值给b所在的位置,b向右挪一位。通过i来读取当前数,用b来进行不为0的数的排序(保持原数组顺序)如图:如此循环至结束。结束后.

2021-11-09 15:54:54 2298 1

原创 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为O(1) 的原地算法解决这个问题吗? 比如:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]无脑解法:就硬挪,双重循环,内层循环控制从左到右挪动有几个数挪几次,外层循环控制K挪几个位置。public void arra...

2021-11-08 15:25:36 1399

原创 java 二分查找 的思路优化

今天在刷算法题时,遇到了二分查找,一开始的做法十分笨拙,逻辑也很换乱一开始的想法是从取中间值与目标值进行比较。如果大于,向左找,下标定义为0,循环范围[0,mid),找到了就输出下标,没找到输出-1。。如果小于,向右找,下标定义为中间值加一,循环范围[mid+1,nums.lenght),找到了就输出下标,没找到输出-1。在方法最后加的return -1,是防止方法因为返回值报错(我不知道我当时为什么不把上面的return -1删了 大概是脑子没转过来弯)而且只进行了一次二分,没有进行递

2021-11-07 23:04:35 112

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除