Patching Array
找出数组中的补丁元素个数,使其可以生成1-n的所有数字;找出缺少的元素miss,刚开始[0,miss=1),则表示当前数字生成最大连续数字范围为[0,miss),如果nums[i]<=miss, 则表示加入该元素之后可以生成miss值,且范围扩大到[0,miss+nums[i]),反之,则说明缺少miss元素,则加入miss元素,则范围变为[0,2*miss)。直到miss>n,停止。
Single Number
一个数组,除了一个元素之外其他元素均出现2次,找出该元素。两个元素相同异或为0,0和某一元素异或为该元素。所以遍历数组,异或一遍即为所求。
Single Number II
一个数组,除了一个元素之外其他元素均出现3次,找出该元素。int类型,则有32位。针对第i位,记录该位出现1的个数count,count%3则位所求元素第i位的值,因为相同元素出现3次,必为3的倍数,得到的余数是由于所求元素造成的。
Single Number III
一个数组,除了2个元素出现1次外其他元素均出现2次,找出这两个元素,不考虑先后顺序。假如这两个元素是a,b,根据single number I可以找出a^b=result,我们的目的是区分出a,b来。
易知,result中出现1的地方必定是a、b中一个此位是1,另一个是0。
任何数和某位是1其他位是0(其他位为0相与均变为0)的数进行&操作不改变该元素这一位上的数,结果为0表示该元素此位位0,大于0表示该元素此位是1.
则我们只需要找出result中某一位是1的数,用其和所有元素&,则会将a、b两个元素分开,也会将所有元素分成两部分。每部分相异或,则会分别得到a、b。
关于找出result中某一位是1,其他位为0:n&(n-1)表示将n的最末尾一位1变为0,我们要做的就是只保留最末尾一位的1,则n&(~(n-1))Product of Array Except Self
一个数组,除此位元素外其他元素相乘。考虑一个数组中,只有一个元素位0的情况。
Bulb Switcher
初始灯泡为off,第i次更改i的倍数位的灯泡的状态,则求最终有多少灯泡亮。想到了某一位灯泡的状态和此位的因数个数有关。因数个数为奇数,则为on,反之为off。
综上,所以只与因数个数的奇偶有关。而对一个数,因数都是成对出现的(偶数个),除了平方数1,4,9等。
所以此题转化为求1~n中有多少个平方数的问题。直接sqrt(n)即为所求。Maximum Product of Word Lengths
找出两个words没有相同元素,返回最大的length(word[i]) * length(word[j])关键怎样快速区别两个words中没有相同元素。将每一个words转化为二进制int型,因为一共有26个字母,位数完全够用。如果该字母出现,二进制此位为1(num[i] |= 1 << (words[i].charAt(j) - ‘a’))。二进制数两两相与,为0表示没有相同的字母。
Unique Binary Search Trees
给定n,给出1~n可形成二查搜索树的个数。其实每个节点作为根几点,除去其,剩下的n-1个节点,左测若i个,右侧则为n-i-1个节点,则左右可形成个数相乘则为去(i,n-i-1)时可形成的二查搜索树的情况。动态规划,从底向上依次得到1~n个节点时二叉树的个数。
Kth Smallest Element in a BST
求二查搜索树中第k小元素二叉搜索树中根遍历为升序排序数据,则找左子树节点个数,如果等于k-1,则为root;
如果大于,则在左子树中找第k小元素;
如果小于,则在右子树中找第k-left-1小元素。Generate Parenthesis
输入n,左右括号匹配,返回所有可能的字符串递归思路:如果左右括号均为0,则将该字符串加入list;如果左边大于0,加左括号;如果右边大于0,并且左边剩余的小于右边,则可以加右括号。
Leetcode medium (一)
最新推荐文章于 2024-08-25 13:32:47 发布