深度学习
题目:一个int数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。下面要来看下如果找出这个与另外两个数的该bit位不同的数。先看第一种情况,如果a,b,c三个数中,有两个该bit位为0,另一个为1,我们遍历数组,分别统计该数组元素中该bit位为1和0的元素个数,分别设为count1和count0,并同时将所有该bit位为1的元素异或,所有该bit位为0的元素异或,得到的结果分别设为temp1和temp0。如果count1为奇数,则可能有两种情况,a,b,c三个数的该bit位全为1,或者有两个为0,一个为1,如果有temp0==0,则说明是前一种情况(a,b,c的该bit位全为1的话,所有该bit位为0的每个元素出现了两次,因此异或后的结果为0),即3个只
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。这道题看起来非常有趣,既然做加法,但却不让使用+、-、*、/四则运算符号,很多同学看了一眼就懵逼了,这可难倒八戒了。我们来分析一下,如果不让用四则运算符合,那显然就是用递归了。为啥呢?原因很简单,递归程序里可以不需要运算符合,只要有递归结束条件即可。举个例子,比如2+3=?2用二进制表示是00103用二进制表示是0011不用四则运算,我们就该想到使用逻辑运算符,与、或、非、异或,同或等。显然,我们需要用到与、异或异或相当于不带进位的加法:1^0=1,0^1=1,0^0=0,1^1=0也就是:与运算符正好我们可以用来求进位:1&0=0,0&1=0,0&0=0,1&1=1&nbs
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:{[2,3,4],2,6,2,5,1},{2,[3,4,2],6,2,5,1},{2,3,[4,2,6],2,5,1},{2,3,4,[2,6,2],5,1},{2,3,4,2,[6,2,5],1},{2,3,4,2,6,[2,5,1]}。方法一:一个i指示每个窗口的起点,在i循环内j遍历该窗口找出最大值。改进的话,先找出第一个窗口中的最大值,然后窗口移动的时候观察上个窗口的最大值是否移除,如果移除就在新
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。有三种思路,第一就是利用栈先入后出的特性完成,第二就是存下来然后进行数组翻转。第三是利用递归。栈思路:class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> value;  
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:f(1)=1f(2)=f(2-1)+f(2-2) //f(2-2)表示2阶一次跳2阶的次数。f(3)=f(3-1)+f(3-2)+f(3-3) ...f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(n-(n-1))+f(n-n) 说明: 1)这里的f(n)代表的是n个台阶有一次1,2,...n阶的跳法数。2)n=1时,只有1种跳法,f(1)=13)n=2时
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目解析:比如只有一个台阶,这个时候这只青蛙没有第二种选择,只能一次跳1级台阶,也就是只有一种跳法。比如共有2个台阶呢?此时,这只青蛙就有两种选择了,第一种选择是一次跳1级,跳两次。第二种选择是一次跳2级,跳一次。.......那么共有n级台阶呢,通过大脑想这个过程实在是过于复杂,尤其n特别大时,已经超过了人脑的计算范围,那么我们就只好借助计算机的超高能力的计算来得到结果了,我们分析一下。倒过来思考一下,比如这只青蛙已经跳到了第n级台阶,此时它正站在第n级台阶上沾沾自喜呢,那么,它的上一步是什么呢?因为青蛙一次只能跳1或2级台阶,所以,上一步这只青蛙一定在第n-1或