7.231 给定一个整数,编写一个函数来判断它是否是 2 的幂次方
/**
* @author mys
* @version 2019.8.27
* 给定一个整数,编写一个函数来判断它是否是 2 的幂次方
*
* n = 2^x (n为2的幂次方)
* 满足条件:1. n > 0
* 2. n & (n - 1) == 0
*/
package com.mys;
import org.junit.Test;
public class ISPowerOfTwo231 {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) ==0;
}
@Test
public void fun() {
System.out.println(isPowerOfTwo(218));//false
}
}
8.237 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点
/**
* @author mys
* @version 2019.8.20
* 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
*
* 输入: head = [4,5,1,9], node = 5
* 输出: [4,1,9]
* 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
*
* 说明:
* 链表至少包含两个节点。
* 链表中所有节点的值都是唯一的。
* 给定的节点为非末尾节点并且一定是链表中的一个有效节点。
* 不要从你的函数中返回任何结果。
*/
package com.mys;
import org.junit.Test;
public class DeleteNode237 {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
@Test
public void fun() {
//初始化节点
ListNode node1 = new ListNode(4, null);
ListNode node2 = new ListNode(5, null);
ListNode node3 = new ListNode(1, null);
ListNode node4 = new ListNode(9, null);
node1.next = node2;
node2.next = node3;
node3.next = node4;
//删除节点
deleteNode(node1);
//打印链表
ListNode head = new ListNode();
head.next = node1;
while (head.next != null) {
System.out.println(head.next.val);
head = head.next;
}
}
}
9.217 给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
//哈希表
public boolean countainsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<>(nums.length);
for (int x : nums) {
if (set.contains(x)) {
return true;
}
set.add(x);
}
return false;
}
//对数组预处理(排序)(效率更高,时间和内存都比哈希表消耗少)
public boolean countainsDuplicate2(int[] nums) {
Arrays.sort(nums);
for (int i = 0; i < nums.length - 1; i ++) {
if (nums[i] == nums[ i + 1]) {
return true;
}
}
return false;
}