摘要:解题思路 通过位运算进行筛选 第一次遍历,全体异或结果为xorsum 取出两个元素不同的地方lsb = xorsum & (-xorsum)为特殊位 第二次遍历,直接分成两组,一组特殊位是1,另一组特殊位是0,分组进行异或运算,两两相等得0,结果就是单独元素,保存到数组 代码 异或^= 00=0;
阅读全文
摘要:逆序链表,逆序输出 直接相加即可 同时遍历两个链表,短的结束后取0代替, 定义sum = n1 + n2 + temp; temp = sum / 10 ;【只会取到0和1】 赋值时,直接用sum%10, 最后判断temp是否大于0,大于0表示要进位,最后要再new一个节点。并赋值1 /** * D
阅读全文
摘要:只有如下三种情况: /* i-2 case 1 : i-1┌─┐ └─┼─>i i-3 i-2 case 2 : i-1 ┌────┐ └─══>┘i-3 i i-4 (i overlapped i-4) case 3 : i-4 ┌──┐ │i<┼─┐ i-3│ i-5│i-1 └────┘ i-
阅读全文
摘要:每次排除一行,或者一列,直接用两个二分法,一次排除半行或半列 public class Optimization { public boolean searchMatrix(int[][] matrix, int target) { int x = 0; int y = matrix[x].leng
阅读全文
摘要:解题思路 直接从根号处遍历即可 代码 class Solution { public int[] constructRectangle(int area) { //定义一个数组,长度只要2就可以 int[] arr = new int[2]; //初始化,默认肯定是1*area == area ar
阅读全文
摘要:暴力会超时,此处将存储的单词按长度分类,避免了超时。最好的解法是【前缀树】 public class WordDictionary { private Map<Integer, Set<String>> map;//创建一个二维哈希表 public WordDictionary() { map =
阅读全文
摘要:class Solution { public String reverseStr(String s, int k) { String result = "";//保存新的字符串 int n =s.length(); for (int i = 0;i < n;i+=2*k){//2k为单位递增 if
阅读全文
摘要:给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列: countAndSay(1) = "1" countAndSay(n) 是对 countAndSay(n-1) 的描述
阅读全文
摘要:解题思路 首尾交换 代码 class Solution { public void reverseString(char[] s) { char temp; int start = 0; int end = s.length-1; while(start < end){ temp = s[start
阅读全文
摘要:解题思路 分别以每个点为中心,向外扩散,分奇数个和偶数个,对比长度后取最长 代码 class Solution { public String longestPalindrome(String s) { if(s.length() == 0 || s == null){ return ""; } /
阅读全文