剑指offer
算法
咸鱼妹WWW
这个作者很懒,什么都没留下…
展开
-
剑指Offer——调整数组顺序使奇数位于偶数前面
在这道题目中,使用的时&(按位与运算)来判断奇数或者偶数,可以使用按位与运算进行奇偶数的判定,x&1==1,则说明x为奇数(将x转化成二进制数,若是奇数,则二进制最后一位一定为1,1&1=1) classSolution{ publicint[]exchange(int[]nums){ inti=0; intj=nums.length-1; inttmp; while(i<...原创 2020-06-01 14:22:28 · 98 阅读 · 0 评论 -
剑指offer——只出现一次的数字java
按位异或的运算规则:同0,异1。 异或运算的性质: ①任何数和 0做异或运算,结果仍然是原来的数。 ②任何数和其自身做异或运算,结果是 0。 ③异或运算满足交换律和结合律。 classSolution{ publicintsingleNumber(int[]nums){ intsingle=0; for(intnum:nums){ single^=num; } returnsi...原创 2020-05-14 11:54:56 · 101 阅读 · 0 评论 -
剑指offer——数组中重复的数字java
本题用到了hashSet去重原理。 首先hashSet的特点:无序的,不允许重复,底层数据结构是哈希表(它是基于hashMap实现的)。 hashSet保证元素唯一性:依赖于hashCode()和equals()方法,在他的add方法中,添加了要添加对象再集合中是否存在,即迭代集合中的每个元素,和要添加的相比较,如果相同就不存。 classSolution{ publicintfindRepeatNumber(int[]nums){ Set<Inte...原创 2020-05-13 13:30:25 · 116 阅读 · 0 评论 -
剑指offer——旋转数组中最小的数字java
二分法查找,也可以说是二分法的升级版,二分法要求数组有序并且不重复。 [3,4,5,1,2] //首先比较中间的数字与最后一个数字, ①若是中间的数字较大,就转向右侧查找(也可以简单理解为查看中间的数字之后是否还是递增), ②若是中间数字小于最后的数字,就转向左侧查找(也可以简单理解为查看中间的数字之前有没有比中间的数字更小的), ③如果出现等于的情况,j--,查找i~j-1之间的数组。 classSolution{ publicintminArray(i...原创 2020-05-13 09:56:31 · 103 阅读 · 0 评论 -
剑指offer——用两个栈实现队列java
栈的特点是先进后出。 在本题中,定义了两个栈,stack1和stack2,其中,stack1是用来辅助stack2实现deleteHead()操作。即stack1中的元素相对于队列中的顺序是正序的,stack2中的元素是倒序的。所以stack2执行尾部插入,stack1执行头部删除。 1.deleteHead():取头部元素操作。 若要取头部元素,需将元素从stack2中出栈,然后再压入stack1栈中,这是,stack1中栈顶元素为头部元素,也就是队列的首个元素。 2.appendTa...原创 2020-05-12 17:29:52 · 82 阅读 · 0 评论