网站建设需要步骤,wordpress wp_term_relationships,宁波注册公司需要多少钱,网站建设所需人员1.环形链表II题目链接思路#xff1a;设置快慢双指针注意#xff1a;#xff08;1#xff09;是否有环#xff08;快慢双指针是否能碰面也就是相等#xff09;#xff08;2#xff09;环形入口的判断。从头结点出发一个指针#xff0c;从相遇节点 也出发一个指针…1.环形链表II题目链接思路设置快慢双指针注意1是否有环快慢双指针是否能碰面也就是相等 2环形入口的判断。从头结点出发一个指针从相遇节点 也出发一个指针这两个指针每次只走一个节点 那么当这两个指针相遇的时候就是 环形入口的节点。相遇节点≠环形入口解法一public ListNode detectCycle(ListNode head) {ListNode fast head;ListNode slow head;// 循环判断条件中fast.next是为了杜绝一个元素不能成环while (fast ! null fast.next ! null){fast fast.next.next;slow slow.next;if (fast slow) // 有环{ListNode index1 fast; //也可为slowListNode index2 head;// 两个指针从头结点和相遇结点各走一步直到相遇相遇点即为环入口while (index1 ! index2){index1 index1.next;index2 index2.next;}return index1;}}return null;
}2.有效的字母异位词题目链接思路用一个数组记录某一字符串的元素再遍历另一字符串时一一删除判断数组中是否有元素为0注意string.chatAt方法的使用表示返回指定索引处的字符解法public boolean hash(String s, String t){int[] res new int[26];for (int i 0; i s.length(); i) {res[s.charAt(i) - a];}for (int i 0; i t.length(); i) {res[t.charAt(i) - a]--;}for (int re : res) {if (re ! 0)return false;}return true;
}3.赎金信题目链接思路参照上题区别于先判断字符串magazine并且需要记录每个字符出现的次数注意string.toCharArray方法的使用将字符串转换为字符数组区分chatAt解法 public boolean canConstruct(String ransomNote, String magazine) {int[] record new int[26];// 遍历for (char c : magazine.toCharArray()) {record[c - a] 1;}for (char c : ransomNote.toCharArray()) {record[c - a] - 1;}// 如果数组中存在负数说明ransomNote字符串总存在magazine中没有的字符for (int i : record) {if (i 0) {return false;}}return true;
}4.两个数组的交集题目链接思路看见最终结果无序且不重复可以使用set这里分别使用set和数组进行编码注意在题目未给出length时不要盲目新建数组也就是说如果哈希值比较少、特别分散、跨度非常大使用数组就造成空间的极大浪费 set的缺点是 不仅占用空间比数组大而且速度要比数组慢。解法一使用setpublic int[] intersection(int[] nums1, int[] nums2) {if (nums1 null || nums1.length 0 || nums2 null || nums2.length 0) {return new int[0];}SetInteger set1 new HashSet();SetInteger resSet new HashSet();for (int i : nums1) {set1.add(i);}for (int i : nums2) {if (set1.contains(i)){resSet.add(i);}}//方法1将结果集合转为数组
// return resSet.stream().mapToInt(x - x).toArray();//方法2另外申请一个数组存放setRes中的元素,最后返回数组int[] arr new int[resSet.size()];int j 0;for(int i : resSet){arr[j] i;}return arr;
}解法二使用数组这个题后来给出了length大小public int[] intersection(int[] nums1, int[] nums2) {int[] res new int[1000];
// set用来保存结果SetInteger result new HashSet();for (int i : nums1) {res[i] 1;}for (int i : nums2) {if (res[i] 1) {result.add(i);}}return result.stream().mapToInt(x - x).toArray();
}