程式員面試100題之十四:強大的和諧

實現一個挺進階的字元匹配演算法:給一串很長字串,要求找到符合要求的字串,例如目的串:1231******3***2 ,12*****3 這些都要找出來,其實就是類似一些和諧系統。。。。。        這題的真正意思就是,給你一個目標串,如“123”,只要一個字串裡面同時包含1、2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。加入目標串的長度為m,模式串的長度為n,我們很容易想到O(mn)的演算法,就是兩遍for迴圈搞定。那麼有沒有更快的方法呢?      

面試智力題:天平稱球

 題目:現有12個球,其中有一個球和其他的球重量不一樣,但是外形還是一樣的,現在要求你用一個天平在只稱3次的情況下找出不一樣的這個球來?如果換成13個球那又怎麼樣呢?題目自己很早以前就看過,但是答案當時沒怎麼想出來,看過網上答案。剛才一個同學在群上討論,發現自己還是通過網上找答案,沒有想出來。從網上找到正解,供自己學習。12球:將球分為a b c d; e f g h; i j k l 三組。第一次稱量,比較 abcd efgh情形一:兩者重量相等,此時說明答案在ijkl中。稱量ij,如果相等,

開關和燈泡的對應關係

       在房裡有三盞燈,房外有三個開關,在房外看不見房內的情況,你只能進門一次,你用什麼方法來區分哪個開關控制哪一盞燈?      答案:      設三個開關是1、2、3。開啟開關1等半個小時,關上開關1並開啟開關2。      進房後去摸燈泡,熱的是開關1對應的燈泡;亮的是開關2對應的燈泡;不亮不熱的是開關3對應的燈泡。      分析:      

程式員面試100題之十:快速尋找滿足條件的兩個數

      能否快速找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的值,為了簡化起見,我們假設這個數組中肯定存在至少一組符合要求的解。     假如有如下的兩個數組,:    5,6,1,4,7,9,8    給定Sum= 10    1,5,6,7,8,9    給定Sum= 10   分析與解法    這個題目不是很難,也很容易理解。但是要得出高效率的解法,還是需要一番思考的。    解法一     一個直接的解法就是窮舉:從數組中任意取出兩個數字,計算兩者之和是否為給定的數字。  

程式員面試100題之十一:數組迴圈移位

      設計一個演算法,把一個含有N個元素的數組迴圈右移K位,要求時間複雜度為O(N),且只允許使用兩個附加變數。     不合題意的解法如下:     我們先實驗簡單的辦法,可以每次將數組中的元素右移一位,迴圈K次。abcd1234--->4abcd123--->34abcd12--->234abcd1--->1234abcd。代碼如下所示:RightShift(int *arr, int N, int K){while(K--){int t = arr[N - 1

程式員面試100題之十二:求數組中最長遞增子序列

      寫一個時間複雜度儘可能低的程式,求一個一維數組(N個元素)中最長遞增子序列的長度。     例如:在序列1,-1,2,-3,4,-5,6,-7中,其最長遞增子序列為1,2,4,6。     分析與解法     根據題目要求,求一維數組中的最長遞增子序列,也就是找一個標號的序列b[0],b[1],... b[m](0<=b[0]<b[1]<...<b[m]<N),使得array[b[0]]<

getchar、scanf以及緩衝區的概念

     1、getchar()是stdio.h中的庫函數,它的作用是從stdin流中讀入一個字元,也就是說,如果stdin有資料的話不用輸入它就可以直接讀取了。      getch()和getche()是conio.h中的庫函數,它的作用是從鍵盤接收字元,getchar帶有回顯。      與前面兩個函數的區別在於: getchar()函數等待輸入直到按斷行符號才結束(前提是緩衝區沒有資料),斷行符號前的所有輸入字元都會逐個顯示在螢幕上。但只有第一個字元作為函數的傳回值。#include "

不用比較子及迴圈控制語句,判斷int型的a、b兩數的大小

 看到這個題目的時候,我當時想到的,就是首先進行a-b,然後判斷最高的符號位是1還是0。。我想大家也都會想到這一點:int max(int a, int b){int max[2] = { a, b };return max[((a - b)&0x80000000) >> 31 ]; //與運算,將最高位的後面31位全部置為0,右移31位取出符號位}      

類似qq等重抽屜菜單的實現。

    為了實現像qq,最佳化大師中菜單。在網上找了好久,終於在vckbase中找到了。主要的原理就是通過移動視窗來實現的。    我實現的工具中用了2個按鈕和兩個listctrl,不過listctrl可以用其他控制項來代替,這樣就更加多樣化了。     首先是為這2個按鈕添加事件,這兩個按鈕的事件響應函數分別是afx_msg void  OnBnClicke1(NMHDR * pNMHDR,LRESULT *pResult);afx_msg void  OnBnClicke2(NMHDR *

char str[] 和 char *str 的區別

char* get_str(void){char str[] = {"abcd"};return str;}       char str[] = {"abcd"};定義了一個局部字元數組,儘管是數組,但它是一個局部變數,返回它的地址肯定是一個已經釋放了的空間的地址。       此函數返回的是內部一個局部字元數組str的地址,且函數調用完畢後 此數組被銷毀,所以你返回的指標也就指向一塊被銷毀的記憶體,這種寫法是錯誤的。char* get_str(void){char *str =

Variant類型轉換成CString代碼

在對資料庫操作中通常都會用到Variant 和_bstr_t類型,在網上也有很多關於這方面的代碼。而在進行MFC等程式中,通常都會用到CString類。從Variant轉換成CString代碼如下:CString VariantToString(_variant_t var){CString strValue;_variant_t var_t;_bstr_t bstr_t;COleCurrency var_currency;switch(var.vt){case VT_EMPTY:case

用高精度方法計算n! ,並顯示n!(階乘)的值。

【問題描述】  對於任意給定的n值(n為整數,且1<=n<=100),計算並顯示n!(階乘)的值。  【範例】輸入:n= 10輸出: 3628800又輸入:n= 20輸出: 2432902008176640000使用整型數組來儲存大數類的每一位,並類比手工乘法的全過程。。#include "stdio.h"#include "stdlib.h"const unsigned int MAX = 10000; //整型數組的最大長度 const long long

如何從DirectX診斷工具對話方塊中擷取資訊

  最近再搞一些煩人的東西,基本上就是要擷取如同DirectX診斷工具對話方塊中類似的資料。在這這裡,拚命在網上找了,一般像我們不熟悉這方面的時候,都是這樣過來的。找找了一堆亂七八糟的資訊。比如要擷取系統資訊,可以使用GetVerionEx,擷取記憶體資訊可以使用GetGlobalMemStatus等函數,還有像顯卡的東西,可以使用WMI來得到,等等這些個東西。每種小東西,都可以用不同的方式來擷取。但是dxdiag中的這些資料都有了,我們不妨直接擷取這些,免得使用那麼多各種方法來擷取不同的資訊。

數字翻譯器及其實現

【問題描述】 輸入一個正整數N(N最大是4位元),輸出它的英文表達。 【範例】輸入:1輸出:one又輸入:12輸出:twelve右輸入:135輸出:one hundred thirty five

任意長度的高精度大整數加法

方法:這裡用了資料結構棧,實際上棧更方便實現高精度加法。步驟:1、第一個資料加數按輸入順序(高位到低位)入棧1。此時棧頂為最低位            2、第二個資料加數按輸入順序(高位到低位)入棧2。此時棧頂為最低位            3、將棧1、棧2均pop出棧頂做加法,並考慮進位,結果入棧3,這時棧3正好是低位入棧。            4、處理多餘的棧1、棧2。            5、直接pop出棧3,即正好的從高位到低位的結果。 完整的實現代碼如下:#include

Run-Time Check Failure #2 – Stack around the variable ‘szNum’ was corrupted

今天在偵錯工具的時候出現以下運行是錯誤:“Run-Time Check Failure #2 - Stack around the variable 'szNum' was corrupted. ”隨後在“yin_xiaogang”的Blog上發現了這個問題的解決方案:轉載地址:http://hi.baidu.com/yin_xiaogang/blog/item/9543b61329847d075aaf53e6.htmlStack around the variable was

向RichEditCtrl中添加圖片和URL功能

最近在寫一個工具,需要用到RichEditCtrl控制項,這個控制項需要支援圖片和URL超連結功能。查看了Codeguru和codeproject網站中文章的描述,其中實現的主要部分代碼如下。 if (FAILED(CoInitialize(NULL))) {  return ; } HBITMAP hBitmap =(HBITMAP)LoadImage   (NULL, str, IMAGE_BITMAP, 0, 0,

擷取系統版本詳細資料

// GetWinVer.h #ifndef GETWINVER_H #define GETWINVER_H #define WUNKNOWN        0 #define W9XFIRST        1 #define W95                        1 #define W95SP1                2 #define W95OSR2                3 #define W98

反調試指南

翻譯的很挫,大家不要介意。原文:http://www.codeproject.com/KB/security/Intro_To_Win_Anti_Debug.aspx 介紹:     最近,逆向工程的工具已經是很豐富了。逆向工程是一個非常值得花時間投入的領域,現在很多關於這個領域的資來源站點點。在我學c++的同時學習逆向工程和組合語言真的協助了我理解代碼的工作,同時也提高了我c/c++和asm編寫的能力。然而,逆向工程也有不好的一面。破解者都是獨立使用他們自己逆向工程的知識來進行逆向別的程式員的

二進位在數學中的妙用

十八世紀初,萊布尼茨發明了位元,當時的他肯定沒有預料到二進位在資訊時代會有著如此廣泛的應用。位元以其工作可靠,運算簡單,邏輯嚴密,容易實現等特點,成為了電腦的專用語言。在電腦科學和大量應用數學領域中,二進位記數法是必不可少的。在趣味數學方面,同樣也有廣泛的應用。讓我們先來看一個經典的數學趣題:一工人工作7天,老闆有一段黃金,每天要給工人1/7的黃金作為工資,老闆只能切這段黃金2刀,請問怎樣切才能每天都給工人1/7的黃金?這題不簡單吧?小心別把腦子都想破了。 在給出答案之前,先讓我們看另一個簡單的

總頁數: 61357 1 .... 19140 19141 19142 19143 19144 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.