随笔分类 - 剑指Offer
摘要:原题链接 思路:数组中仅有两个元素出现一次,其余元素均出现两次,也就是说所有元素异或的结果就等于这两个元素异或的结果,异或某一位结果为1说明在这一位这两个数字的位不同(一个为1,另一个为0),因此我们可以选择该不同的位作为划分,以这两个数字的不同位为基准,将数组中该位为1的划分到其中一个组中,为零的
阅读全文
摘要:原题链接 思路:本题最容易想的思路就是哈希表,第二种思路是使用位运算,由于只有一个数只出现了一次,其余数字都出现了三次,那么也就是说除去这个出现一次的数字以外,剩余的数字之和可以被三整除,同时,这些数字在二进制某一位上为1的个数也应该是三的倍数,如果某一位上 1的个数不是3的倍数说明那个只出现一次的
阅读全文
摘要:原题链接 思路:这题乍看上去好像是一个二分,其实上有更优的解法,由于从右上角往左下角看刚好是一颗二叉搜索树的形状,因此可以把这个二维数组看作是一个BST,因此解法就是BST的查找功能在此数组中的实现,将右上角元素看为根节点,从根节点开始,如果当前元素小于目标元素则找他的左子树,大于则找他右子树,否则
阅读全文
摘要:原题链接 思路:本题有点贪心算法的感觉,由题意可以确定的是卖一定在买之后,也就是说我们只需要任选一天作为中介,在它当天或它之前买入,在它当天或它之后卖出,这就是题意了。那如何下手呢,要求的是最大利润,计算公式就是卖价减去买价,也就是说卖价越高越好,买价越低越好,但是我们不知道以哪一天做为那个中介,因
阅读全文
摘要:原题链接 思路:题目不让用除法,类似于前缀和,我们很容易想到前缀积和后缀积,也就是说对于每一位数字,我们计算一个前缀积数组用来存放某个数字之前的数字之积,再用一个后缀数组保存这个数组中这个数后面数的乘积,之后前缀积和后缀积相乘即得解 1 public static int[] constructAr
阅读全文
摘要:原题链接 细节题,把题目读懂就能做得出来 附代码 1 public static int strToInt(String str) { 2 int begin = 0; // 记录刨除空格以外的第一个有效位 3 long ans = 0L; // 记录临时答案 4 char c = ' '; //
阅读全文