231. 2的幂

    2^3=8 得  8是2的幂

    判断一个整数是不是2的幂,可根据二进制来分析。2的幂如2,4,8,等有一个特点:

    二进制数首位为1,其他位为0,如2为10,4为100

    2&(2-1)=0   4&(4-1)=0     即得出结论如果一个数n为2的幂,则n(n-1)=0

258 各位相加的过程为3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。

    有如下关系:num = a * 10000 + b * 1000 + c * 100 + d * 10 + e

    即:num = (a + b + c + d + e) + (a * 9999 + b * 999 + c * 99 + d * 9)

    因为 a * 9999 + b * 999 + c * 99 + d * 9 一定可以被9整除,因此num模除9的结果与 a + b + c + d + e 模除9的结果是一样的。

    对数字 a + b + c + d + e 反复执行同类操作,最后的结果就是一个 1-9 的数字加上一串数字,最左边的数字是 1-9 之间的,右侧的数字永远都是可以被9整除的。

    return 1 + (num-1) % 9;

371.两整数之和 不使用+.-符号

    思路:使用异或运算,可以计算出两个数中仅有1的位置相加   a^b

       使用与运算,可以知道两个数都为1的位置,需要进位。a&b

       将以上两个结果相加,就是想要的结果。但是仍然不能使用+,则循环执行上面两部,直到b为0,则不需要相加,退出。

       while(b!=0){
                  c = a^b;
                  b = (a&b)<<1;
                  a = c;
             }
            return a;

342.4的幂

    先判断n是不是2的幂,因为4的幂一定是2的幂  n&(n-1)==0

    因为如果是4的幂,则二进制1后面的0为偶数个,也就是1一定在奇数上。通过n与.0X55555555(....1010101)进行&操作,保留奇数位,判断是否改变。(num&0x55555555)==num

    最后结果 return (num&0x55555555)==num && (num&0x55555555)==num

326.3的幂

    要求n是不是3的幂,则log3(n)==0即可。 logm(n) = log10(n)/log10(m);

    double result = log10(n)/log10(3);

    return (result==int(result))?true:false;

453. 最小移动次数使数组元素相等

    题:给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。

     例子: 输入:[1,2,3]     输出: 3

    解释:   只需要3次移动(注意每次移动会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]    

    思路:逆向思考,每次移动让剩余的n-1个数加1,相当于每次移动让选定的那个数减1, 所以最少移动次数其实就是所有元素减去最小元素的和

         代码:public int minMoves(int[] nums) {

         int min = nums[0];
         int sum = nums[0];
          for(int i=1;i<nums.length;i++){
            sum +=nums[i];
            if(nums[i]<min){
              min = nums[i];
            }
          }
         return sum-min*nums.length;
      }

448. 找到所有数组中消失的数字

    题:给定一个范围在  1 ≤ a[i] ≤ nn = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。

      找到所有在 [1, n] 范围之间没有出现在数组中的数字。    

    例:输入:[4,3,2,7,8,2,3,1]    输出:[5,6]

思路:将数字中的数字nums[i]对应的索引中的数(比如:第一个数nums[0]是4,则对用的4的索引的数nums[4-1]=7)变为负数,即nums[4-1]=-7。

       数组遍历完一遍之后,变为 [-4,-3,-2,-7,8,2,-3,-1],对用的index为5,6。即未找到的数为5,6

367. 有效的完全平方数

    例:输入16,输出True   输入14,输出False

    思路:1,首先想到的是暴力法或者二分查找等方法,从1~n中找一个数m,不断判断m*m==n?

         2,通过列举所有的完全平方数,1,4,9,16,25,36,49,64,81,100…等等,发现完全平方数的差都为奇数,即1,3,5,7,9,11,13,15…等等~所以可以判断完全平方数应该是N个奇数的和。

    核心代码:for(int i = 1; num > 0; i += 2){
                    num -= i;
               }
               return num == 0;

leetcode有意思的题目总结的更多相关文章

  1. leetcode top 100 题目汇总

    首先表达我对leetcode网站的感谢,与高校的OJ系统相比,leetcode上面的题目更贴近工作的需要,而且支持的语言广泛.对于一些比较困难的题目,可以从讨论区中学习别人的思路,这一点很方便. 经过 ...

  2. leetcode - 位运算题目汇总(下)

    接上文leetcode - 位运算题目汇总(上),继续来切leetcode中Bit Manipulation下的题目. Bitwise AND of Numbers Range 给出一个范围,[m, ...

  3. leetcode tree相关题目总结

    leetcode tree相关题目小结 所使用的方法不外乎递归,DFS,BFS. 1. 题100 Same Tree Given two binary trees, write a function ...

  4. [LeetCode] 二叉树相关题目(不完全)

    最近在做LeetCode上面有关二叉树的题目,这篇博客仅用来记录这些题目的代码. 二叉树的题目,一般都是利用递归来解决的,因此这一类题目对理解递归很有帮助. 1.Symmetric Tree(http ...

  5. [LeetCode] 动态规划入门题目

    最近接触了动态规划这个厉害的方法,还在慢慢地试着去了解这种思想,因此就在LeetCode上面找了几道比较简单的题目练了练手. 首先,动态规划是什么呢?很多人认为把它称作一种"算法" ...

  6. 关于LeetCode上链表题目的一些trick

    最近在刷leetcode上关于链表的一些高频题,在写代码的过程中总结了链表的一些解题技巧和常见题型. 结点的删除 指定链表中的某个结点,将其从链表中删除. 由于在链表中删除某个结点需要找到该结点的前一 ...

  7. LeetCode - 排列相关题目

    1.获取全排列 https://leetcode.com/problems/permutations/submissions/ 按字典序输出: 这里用的是vector<int>,不是引用. ...

  8. LeetCode中二叉树题目总结

    本文仅为博主个人总结,水平有限,欢迎大神指出不妥处. 关于二叉树的相关概念可以参见二叉树的百度百科,或binary tree Wiki. 二叉树结点类的常见定义为: /* Definition for ...

  9. All LeetCode Questions List 题目汇总

    All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...

随机推荐

  1. HDU 4586 Play the Dice (数学,概率,等比公式,极限)

    题意:给你一个n面的骰子每个面有一个值,然后其中有不同值代表你能获得的钱,然后有m个特殊的面,当你骰到这一面的时候可以获得一个新的机会 问你能得到钱的期望. 析: 骰第一次     sum/n 骰第二 ...

  2. linux 不在sudoers文件中、普通用户获得sudo权限

    现在要让jack用户获得sudo使用权 切换到超级用户root $su root 查看/etc/sudoers权限,可以看到当前权限为440 $ ls -all /etc/sudoers -r--r- ...

  3. APUE(8)---进程控制(1)

    一.进程标识 每个进程都有一个非负整型标识的唯一进程ID.因为进程ID标识符总是唯一的,常将其用做其他标识符的一部分以保证其唯一性.进程ID虽然是唯一的, 但是却是可以复用的.ID为0的进程通常是调度 ...

  4. 异步IO类

    也学习多线程一段时间了,也写了几个简单实用的功能类,也意思到细节的处理的重要性,现在就让我们来写一个稍稍更有用的异步IO的类. 本来想参考Java NIO 中的类,Java NIO作为新io包,本身提 ...

  5. Nginx根据用户请求的不同参数返回不同的json值

    用户请求url:http://localhost:8000/getconfig?v=1.03.01,根据参数v=1.03.01或者其他的值返回不同的json值.如果用户请求不带该参数,则返回默认的js ...

  6. PreTranslateMessage()函数捕获键盘按键消息

    01. PreTranslateMessage函数,常用于屏蔽MFC对话框中默认的Enter和ESC消息 函数原型:BOOL PreTranslateMessage(MSG* pMsg) 用法举例: ...

  7. js 格式化时间

    //格式化时间 function time_format(time) { return new Date(parseInt(time) * 1000).toLocaleString().replace ...

  8. php 与java安卓客户端的查询交互

    PHP 服务器端: function getids() { $this->output->set_header('Content-Type: application/json; chars ...

  9. [WIN7]Win7建立AccessPoint(SoftAP)

    要构建可以访问互联网的无线接入点,必须有台带无线网卡(正常安装完驱动)的并且能访问Internet的计算机. 1.检查环境 [网络共享中心] - > [网络适配器] 检查有线无线网络适配器是否都 ...

  10. php二维数组去除重复值

    <?php //二维数组 $test["aa"] = array("id"=>"17","name"=> ...