leetcode 每日刷题 —— 231, 237, 217

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 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点
leetcode 每日刷题 —— 231, 237, 217_第1张图片

/**
 * @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;
    }

你可能感兴趣的:(leetcode)