算法
霖墨
这个作者很懒,什么都没留下…
展开
-
三大基础的排序算法
一、冒泡排序算法思想:正如其名字一样,n个数每次将最大的数(或最小的数)放到最后一个位置,就像过关斩将一样,然后待排序的数减一,直到所有的数都是有序的,不交换,此时sorted = true,排序结束。public static void bubbleSort(int arr[]) { boolean sorted = false;//标志是否已经有序 for ...原创 2020-01-15 16:21:40 · 418 阅读 · 0 评论 -
LeetCode第三题:无重复字符的最长子串(Longest Substring Without Repeating Characters)
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。方法一:暴力破解法这题我第一次想到的是暴力破解,即3个循环,类似于字符串匹配public int lengthOfLongestSubstring(String s){ int res = 0; for(int i = 0;i<s.length();++i){ ...原创 2020-01-14 18:27:55 · 119 阅读 · 0 评论 -
leetcode第二题:两数相加(add two numbers)
刷题遇到的问题:这题在思路上是没有问题的,主要一个坑在指针上。一个结点的next结点为空时,p = p->next; //p->next == NULLp = new ListNode(0);这种情况下会导致链表断开,因为p指向了一个NULL的空间。以下就是我错误的代码:class Solution { ListNode addTwoNumbers(ListNode...原创 2020-01-13 15:06:30 · 254 阅读 · 2 评论 -
几个经典的递归问题
以下内容来自维基百科:递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。维基百科的几个例子有助于理解递归:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?...原创 2020-01-12 17:39:01 · 5856 阅读 · 0 评论 -
两数之和(two sum)
LeetCode第一题题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。解决方法暴力破解:遍历数组,时间复杂度O(n2n^2n2),空间复杂度O(1)。public static int[] twoSum(int[] num...原创 2020-01-12 15:52:20 · 250 阅读 · 0 评论 -
出现1次与出现k次
题目描述: 数组中只有一个数出现一次其它数都出现了k次,请输出只出现一次的数算法描述:因为k个k进制的数做不进位加法相加为0,例如:2进制,1+1=10,如果不进位的话为0。所以将十进制数转化为k进制,做不进位加法,得到结果,最后再将k进制转化为10进制。代码如下:public class Test5 { public static void main(String[] args)...原创 2020-01-12 12:41:47 · 291 阅读 · 0 评论 -
浮点数转化为精确的二进制浮点数
算法描述:将浮点数左移一位,依次获取每一位,追加到StringBuider里,当StringBuilder长度大于34位时(即浮点数大于32),该数无法用二进制精确表示,输出ERROR,否则则将结果输出。import java.util.Scanner;public class Test4 { public static void main(String[] args) { ...原创 2020-01-11 17:32:39 · 214 阅读 · 0 评论 -
将整数的二进制奇偶位互换
算法描述:通过按位与获取整数的奇数位和偶数位,将偶数位右移一位,奇数位左移一位,两者按位异或,得到结果。import java.util.Scanner;public class Test3 { public static void main(String[] args) { /** * 将整数的二进制奇偶位互换 */ ...原创 2020-01-11 17:24:15 · 292 阅读 · 0 评论 -
判断一个整数是不是2的整数次方
算法分析:将这个数减1与这个数按位与例如:8-1 = 78 :1000, 7:111按位与为0,所以8是2的整数次方。import java.util.Scanner;public class Test2 { public static void main(String[] args) { /** * 判断一个整数是不是2的整数次方 ...原创 2020-01-11 16:28:43 · 344 阅读 · 0 评论 -
二进制中1的个数
题目描述: 给定一个数,求它转化为二进制中1的个数方法一:将给定的数与1左移n(n<32)位按位与,结果为不为零,则当前位为1方法二:与方法一类似,将给定的数右移n(n<32)位与1按位与,结果为不为零,则当前位为1方法三:给定的数每次减一与自身按位与,加一,若结果不为零,则重复以上操作。以下是具体的代码:import java.util.Scanner;public...原创 2020-01-11 16:12:20 · 188 阅读 · 0 评论 -
求1-1000的整数中重复的那个数
求1-1000的整数中重复的那个数,有1001个数,只有唯一一个数重复算法一 利用按位异或,因为11=0,10=1,0^0=0,当一组数中当一个出现奇数次的数就会为被筛选出来,出现偶数次就会舍去。时间复杂度O(n),空间复杂度O(1)算法二 使用一个数组统计每个数的个数。时间复杂度O(n),空间复杂度O(n);import java.util.Random;p...原创 2020-01-07 21:34:44 · 524 阅读 · 0 评论